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

380
Vistas
¿Siempre tengo que esperar en un método Async de un objeto desechable en lugar de devolver su Tarea?

Parece que caí en un problema masivo y después de horas de depuración vi que el proceso sale del alcance de "usar" en RunGame1 () y la tarea nunca se completa cuando se esperaba.

 async void Execute(object o) // ICommand.Execute { // fire and forget try { await RunGame2(); // RunGame1() fails to complete } finally { ... } } // This fails due to process going out of "using" scope and never completes Task RunGame1() { var info = new ProcessStartInfo("game.exe") { CreateNoWindow = true }; using var process = new Process() { StartInfo = info }; process.Start(); return process.WaitForExitAsync(); } // Have to await the Task inside the method async Task RunGame2() { var info = new ProcessStartInfo("game.exe") { CreateNoWindow = true }; using var process = new Process() { StartInfo = info }; process.Start(); await process.WaitForExitAsync(); }

¿Existe un patrón para evitar esto, de modo que pueda devolver la Tarea para guardar el compilador creando una máquina de estado adicional o es algo que se debe tener en cuenta?

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

0

De hecho, este es un error común: he visto varios errores debido a similares.

En breve:

  • no , no siempre es necesario que await una tarea y, a veces, puede ser ventajoso evitar la sobrecarga de la maquinaria asíncrona, especialmente en código estricto como el bucle de E/S de archivo/red, pero (y es un gran pero)
  • si eso significa que está escapando de una región de try / finally (que también incluye using y lock , aunque hay otros problemas mayores con el lock en el código async ), entonces debe tener eso en cuenta , lo que generalmente significa "sí, necesita await "

Sería bueno si hubiera un analizador que detectara el return de Task[<T>] / ValueTask[<T>] en un método no async , dentro de dicha región, ya que casi siempre es un error, y para las pocas veces que no lo es (donde finally no tiene nada que ver con lo que se devuelve) podría suprimirse.

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