Me estoy divirtiendo trabajando con System.Threading.Tasks
. Muchas de las muestras de código que veo, sin embargo, se ven así:¿Debo deshacerme de una tarea?
Dim lcTask = Task.Factory.StartNew(Sub() DoSomeWork())
Dim lcTaskLong = Task.Factory.StartNew(Sub() DoSomeWork(), TaskCreationOptions.LongRunning)
Task.WaitAll(lcTask, lcTaskLong)
Esa es la extensión de la muestra.
Las tareas implementan IDisposable
, así que obviamente se supone que debo deshacerme de ellas, pero ¿qué ocurre si solo quiero "disparar y olvidar"?
Si no me deshago, ¿voy a filtrar hilos/asas/memoria/karma? ¿Estoy usando tareas "incorrectas"? (¿Debería simplemente usar un delegado y dejar las tareas en paz?)
¿Puedo disponer de un ContinueWith()
? (Eso parece como jugar a la ruleta rusa.)
Y ... \t \t [CodeAnalysis.SuppressMessage ("Microsoft.Reliability", "CA2000", Justificación = "http://stackoverflow.com/questions/5985973/do-i-need-to-dispose-of -a-task ")] – GarethOwen
A juzgar por el enlace de Stephen Toub al que enlazas, creo que lo tienes al revés cuando dices" [el identificador de espera] es necesario para permitir que las continuas de tareas funcionen correctamente, y solo se usa cuando hay una continuación de una tarea. Si no hay continuación, el método de eliminación de la tarea no tiene ningún efecto real ... "Pero de acuerdo con Toub," Task.Dispose existe debido a la tarea que potencialmente envuelve un identificador de evento ... Si todo lo que estás haciendo está usando continuaciones, ese identificador de evento nunca se asignará y el valor de Dispose disminuirá en gran medida ". es decir, el reverso de lo que implica arriba. –