Hallo Ich habe _noOfThreads
als definierte Aufgaben zu einer Zeit ausgeführt werden. Also fahre ich fort, die Aufgaben mit %
Operator und am Ende der Schleife habe ich Tasks.WaitAll
. Dies ist das Code-Snippet.Task.WaitAll wartet nicht auf untergeordnete Task?
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);
Allerdings merke ich, dass es nicht darauf wartet, dass untergeordnete Aufgaben abgeschlossen werden. Sobald die übergeordneten Aufgaben abgeschlossen sind, wird die nächste Zeile nach Task.WaitAll
ausgeführt. Wie ändere ich diesen Code, um auch auf untergeordnete Aufgaben zu warten?
möglich duplicate von [Task.ContinueWith funktioniert nicht wie ich erwartet] (http://StackOverflow.com/questions/6997480/task-continuewith-not-working-how-i-expected) – mellamokb
Auf eine Randnotiz, was Sie scheinen, hier zu tun, entscheidet über Aufgabenplanung. Wenn Sie die Terminplanung anpassen möchten, können Sie sich den [TaskScheduler] (http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler.aspx) ansehen. Das heißt, der Standard-Scheduler ist schon ziemlich gut darin, das System nicht mit Threads zu überladen, wenn eine große Anzahl von Aufgaben in die Warteschlange gestellt wird. –
@Dan: Das ist nicht meine Angelegenheit. Ich weiß nicht, dass ich das TaskScheduler geben möchte. Ich habe eine Variable und möchte nur so viele Aufgaben wie diese Variable starten. Kurz gesagt, ich möchte etwas wie Semaphore simulieren, wo Sie die Anzahl der Threads definieren und nur diese Anzahl an Threads kann zu einer bestimmten Zeit in dieses Codeelement eingehen. –