Reputation: 1626
So I have this kind of flow:
I wrote this piece of code:
List<Task> workerTasks = new List<Task>();
foreach (Worker worker in workers)
{
Task task = Task.Factory.StartNew(() =>
{
worker.Start();
worker.Dispose();
});
workerTasks.Add(task);
}
// Do some work here
// Wait for unfinished workers
while (workerTasks.Where(t => !t.IsCompleted).Count() > 0) { }
// Proceed
While this code works so far I feel like it isn't good practice. Would you give me some tips how to solve this problem in a better way? Thanks!
Upvotes: 0
Views: 123
Reputation: 30022
You can use Task.WaitAll()
instead :
Task.WaitAll(workerTasks.ToArray() );
Or for async methods:
await Task.WhenAll(workerTasks.ToArray());
Or return the task to the caller:
return Task.WhenAll(workerTasks.ToArray());
Upvotes: 2