Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

190
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda