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 でタスクの完了を待ちたい。しかし、それは待っていません。各メッセージボックスの直後にメッセージボックスが表示されます。

4

4 に答える 4

9

はい、タスクを開始しています。タスクはバックグラウンドで実行されます。ループを完全に同期的に動作させたい場合ProcessDatas()は、タスク内で not を呼び出します。開始して終了するまで待つこともできますが、それがどのようなメリットをもたらすかは明確ではありません。

すべてのタスクを並行して開始したいが、後でそれらを待つ場合は、 を作成してList<Task>から呼び出すTask.WaitAllか、または を使用Parallel.ForEachして開始することができます。

于 2012-04-12T11:34:04.853 に答える
1

タスクが完了すると true になる Bool を作成し、残りを if (bool) ループに入れることはできませんか?

于 2012-04-12T11:38:18.537 に答える
0

Task.Wait ()を呼び出すことができます。

于 2012-04-12T11:33:29.913 に答える
0

このコードを使用してみてください

task1.Wait();

そしてこのタスクを読んでください

于 2012-04-12T11:33:36.990 に答える