Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

189
Views
¿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 Task 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 answers
Answer question

0

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

Permítanme citar aquí la sección de antecedentes y motivaciones 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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!