Hola tengo _noOfThreads
como tareas definidas para ejecutar a la vez. Así que sigo continuando las tareas usando el operador %
y al final del ciclo tengo Tasks.WaitAll
. Este es el fragmento de código.Task.WaitAll no espera la tarea secundaria?
for (int index = 0; index < count; index++)
{
if (index < _noOfThreads)
tasks[index] = Task.Factory.StartNew(somedelegate);
else
tasks[index % _noOfThreads].ContinueWith(task => { foo.bar(); },
TaskContinuationOptions.AttachedToParent);
}
Task.WaitAll(tasks);
Sin embargo, veo que no espera a que se completen las tareas secundarias. Tan pronto como se completen las tareas principales, se ejecutará la siguiente línea después de Task.WaitAll
. ¿Cómo cambio este código para esperar también las tareas secundarias?
posible duplicado de [Tarea.ContinuarWith no funciona como esperaba] (http://stackoverflow.com/questions/6997480/task-continuewith-not-working-how-i-expected) – mellamokb
En una nota lateral, ¿qué parece que hacer aquí es decidir la programación de tareas. Si desea personalizar la programación, puede ver derivada de [TaskScheduler] (http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler.aspx). Dicho esto, el programador predeterminado ya hace un buen trabajo al no sobrecargar el sistema con subprocesos cuando hay una gran cantidad de tareas en cola. –
@Dan: Esa no es mi preocupación. No sé si quiero darle esto a TaskScheduler. Tengo una variable y quiero iniciar Tareas tantas como esa variable solamente. En resumen, quiero simular algo parecido a Semaphore, donde se define el número de subprocesos y solo esa cantidad de subprocesos puede ingresar a ese trozo de código en un momento determinado. –