Cuando crea un Task
al especificar TaskCreationOptions.LongRunning
, se crea un nuevo subproceso específico para la tarea. Si no especifica el TaskCreationOptions.LongRunning
, entonces se utiliza el subproceso de subprocesos.¿Soy responsable de la limpieza después de una tarea creada con el indicador TaskCreationOptions.LongRunning?
Corrígeme si me equivoco pero si se utiliza el subproceso de hebras no es necesario dispose()
la tarea (siempre que no haya utilizado ningún objeto de sincronización dentro de la tarea, como Wait()
en una tarea secundaria).
Si este es el caso, ¿soy responsable de limpiar el hilo adicional creado al usar la bandera TaskCreationOptions.LongRunning
?
Si es así es el siguiente un patrón aceptable:
var task = Task.Factory.StartNew(() => {...}, TaskCreationOptions.LongRunning);
task.ContinueWith(x => task.Dispose());
Aviso cómo, la ContinueWith
no tiene TaskContinuationOptions.LongRunning
, por lo que debe utilizar el subprocesos.
Dicho esto, sin embargo, he leído que el hilo que mueve el estado de la tarea a Completed
, Faulted
o Cancelled
tiene un alto cambio de ejecución de la continuación.
Si alguien pudiera arrojar algo de luz sobre esto, realmente lo agradecería.
Gracias por aclarar que la bandera es una pista en lugar de una regla fija. En cuanto a la limpieza automática de Tareas, realmente espero que este sea el caso, ya que hace que trabajar con ellos sea mucho más fácil. Tengo +1 para la información, pero esperaré para ver si alguien más tiene información adicional para poner sobre la mesa. ¡Espero estar aceptando tu respuesta pronto! Gracias de nuevo. – InvertedAcceleration