Foreach等待任务完成

时间:2012-04-12 11:30:51

标签: c# foreach task-parallel-library

我有这样的情况:

        foreach (var item in listBoxFileNames.SelectedItems)
        {
            MessageBox.Show("I am not waiting");
            CancellationTokenSource tokenSourcve = new CancellationTokenSource();
            CancellationToken token = tokenSourcve.Token;

            Task task1 = new Task(() =>
                {
                    ProcessDatas(); // method
                }
                , token);

            task1.Start();
        }

我想让foreach等待任务完成。不要等待。它会在每个messageBox之后立即显示MessageBox。

4 个答案:

答案 0 :(得分:9)

是的,你开始任务,然后在后台执行。如果您希望循环完全同步,只需在任务中调用ProcessDatas()即可。你可能启动它然后等待它完成 - 但是不清楚会给你带来什么好处。

如果你想并行启动所有任务,但之后等待它们,你可以创建一个List<Task>然后调用Task.WaitAll - 或者只是使用{ {1}}开头。

答案 1 :(得分:1)

一旦完成任务,你能不能让一个Bool成为真,然后将其余部分放在if(bool)循环中?

答案 2 :(得分:0)

Afaik你可以拨打Task.Wait()

答案 3 :(得分:0)

尝试使用此代码

task1.Wait();

并阅读此Task