0

我有这样的情况:

        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 等待任务完成。但它不是在等待。它在每个messagBox 之后立即向我显示MessageBox。

4

4 回答 4

9

是的,您正在启动任务,然后将在后台执行。如果您希望循环完全同步地运行,则ProcessDatas()根本不在任务中调用。您可以启动它,然后等待它完成 - 但尚不清楚这会给您带来什么好处。

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

于 2012-04-12T11:34:04.853 回答
1

你不能做一个 Bool ,一旦任务完成就变成真的,然后把剩下的放在一个 if (bool) 循环中吗?

于 2012-04-12T11:38:18.537 回答
0

Afaik 你可以调用Task.Wait()

于 2012-04-12T11:33:29.913 回答
0

尝试使用此代码

task1.Wait();

并阅读此任务

于 2012-04-12T11:33:36.990 回答