Ciao, ho _noOfThreads
come attività definite da eseguire alla volta. Quindi continuo a svolgere le attività utilizzando l'operatore %
e alla fine del ciclo ho Tasks.WaitAll
. Questo è lo snippet di codice.Task.WaitAll non attende l'attività figlio?
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);
Tuttavia, noto che non attende il completamento delle attività secondarie. Non appena vengono completate le attività principali, viene eseguita la riga successiva dopo Task.WaitAll
. Come posso modificare questo codice per attendere anche le attività secondarie?
possibile duplicato del [Task.ContinueWith non funziona come mi aspettavo] (http://stackoverflow.com/questions/6997480/task-continuewith-not-working-how-i-expected) – mellamokb
Su un lato nota, cosa sembra che tu stia facendo qui sta decidendo la pianificazione delle attività. Se si desidera personalizzare la pianificazione, è possibile visualizzare derivando da [TaskScheduler] (http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler.aspx). Detto questo, lo scheduler predefinito fa già un buon lavoro senza sovraccaricare il sistema con i thread quando un numero elevato di attività viene accodato. –
@Dan: Questa non è la mia preoccupazione. Non so voglio darlo a TaskScheduler. Ho una variabile e voglio avviare Task solo come quella variabile. In breve, voglio simulare qualcosa come Semaphore in cui definisci il numero di thread e solo quel numero di thread può inserire quel pezzo di codice in un dato momento. –