任务完成

use*_*082 11 c# multithreading task threadpool

我有一个创建多个任务的循环,如下所示.每个任务完成后,如何更新屏幕(使用某些数据向文本框添加新行)?

如何检测所有任务何时完成?

C#代码

 for (int i = 0; i < int.Parse(radTextBoxFloodRequests.Text); i++)
 {
      int x = i;
      // Create a task and supply a user delegate by using a lambda expression. 
      var taskA = new Task(() => TaskRequest(int.Parse(radTextBoxFirstNumber.Text), int.Parse(radTextBoxSecondNumber.Text), int.Parse(radTextBoxFloodDelay.Text), x));
      // Start the task.
      taskA.Start();
 }


 private void TaskRequest(int number1, int number2, int delay, int count)
 {
      // Some long running method
 }
Run Code Online (Sandbox Code Playgroud)

Use*_*678 16

你可以使用ContinueWith():

"创建在目标任务完成时异步执行的延续." - MSDN

Task t = new Task(() => Console.WriteLine("")).ContinueWith(task => Console.Writeline("Continue With"), 
                                                            TaskScheduler.FromCurrentSynchronizationContext());
Run Code Online (Sandbox Code Playgroud)

  • 如果要更新UI,则需要添加参数TaskScheduler.FromCurrentSynchronizationContext,您可能位于不同的线程上. (4认同)