Task.WaitAll doesn't wait for child task?

后端 未结 2 645
旧巷少年郎
旧巷少年郎 2020-12-11 06:51

Hello I have _noOfThreads as defined tasks to run at a time. So I keep continuing the Tasks by using % operator and at the end of the loop I have <

相关标签:
2条回答
  • 2020-12-11 07:13

    I think you are allocating your Tasks as:

    Tasks[] tasks = new Task[ _noOfThreads];
    

    Change your code to be:

    Tasks[] tasks = new Task[count];
    
    for (int index = 0; index < count; index++)
    {
    
        if (index < _noOfThreads)
             tasks[index] = Task.Factory.StartNew(somedelegate);
        else
             tasks[index] = tasks[index % _noOfThreads].ContinueWith(task => { foo.bar(); }, 
                                TaskContinuationOptions.AttachedToParent);
    }
    Task.WaitAll(tasks);
    

    Give it a try! Good Luck :)

    0 讨论(0)
  • 2020-12-11 07:35

    You are waiting only for the original task. To wait for all the continuations to complete, you need to call WaitAll on the continuation tasks. Simple way to accomplish this would be to reassign each continuation task back to the original variable so you are waiting only on the final continuations:

    else
        tasks[index % _noOfThreads] =
            tasks[index % _noOfThreads].ContinueWith(task => { foo.bar(); }, 
                            TaskContinuationOptions.AttachedToParent);
    

    See also this related question.

    0 讨论(0)
提交回复
热议问题