Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

239
Vistas
¿Cuál es el caso de uso de `CancellationTokenSource.TryReset`?

CancellationTokenSource tiene un miembro TryReset() . La documentación parece tan estricta que me hace preguntarme por qué existe.

  • Solo funcionará si nadie ya ha llamado Cancel() en él.
  • Solo es válido para usar cuando se haya completado cualquier operación asincrónica anterior emitida con su token, lo que significa (creo) que necesitaría aferrarme a mi objeto Tarea para rastrear si todavía se está ejecutando
  • No es seguro llamar cuando alguien más está tratando de cancelar la operación, requiriendo

Entonces, ¿por qué la gente se molestaría con TryReset ? ¿Por qué no simplemente crear un CancellationTokenSource completamente nuevo para cada operación asíncrona y luego desecharlo después de que se complete la operación y ya no sea necesaria la cancelación? ¿Es CancellationTokenSource un objeto terriblemente costoso de crear?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

  • Aquí puedes encontrar el número original.
  • Aquí puede encontrar la solicitud de extracción relacionada

Permítanme citar aquí la sección Antecedentes y motivación del número

Cuando una biblioteca o marco expone un CancellationToken que generalmente no se cancela (por ejemplo, HttpContext.RequestAborted ), a menudo aún necesitan eliminar el CancellationTokenSource (CTS) de respaldo después de que se completa una operación en lugar de reutilizarlo para tener en cuenta a las personas que llaman que quizás nunca eliminen sus registros.

Para usar el ejemplo de RequestAborted , Kestrel desecha el CTS de respaldo después de cada solicitud en la que se accede al token de RequestAborted . Si Kestrel intentara reutilizar el CTS que respalda el token RequestAborted para futuras solicitudes a fin de reducir las asignaciones, correría el riesgo de filtrar los registros no eliminados y activar los registros no eliminados cuando se cancelan las solicitudes no relacionadas.

Otro escenario en el que la gente quiere poder "restablecer" un CTS es después de llamar a CancelAfter() . Esto ya se puede lograr llamando a CancelAfter(Timeout.Infinite) , pero eso no es necesariamente obvio a menos que lea los documentos. TryReset() es algo que inmediatamente tendría sentido en este escenario al observar las finalizaciones inteligentes.

Otro beneficio es que es inmediatamente obvio si falla el restablecimiento. Si intenta restablecer un tiempo de espera con CancelAfter() , debe verificar después de la llamada para verificar que no hubo cancelación antes o durante la llamada, lo que provocó que CancelAfter() no funcionara. Esto se demuestra en el segundo ejemplo de uso de HttpClient .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda