【发布时间】:2011-01-12 19:23:00
【问题描述】:
我在使用 C# 4.0 Task.Factory.StartNew 时看到的几乎所有文档都指出,为了等待任务完成,您需要等待。但我最初的测试表明这是不必要的。其他人可以给我确认吗?我很好奇为什么这么多在线和印刷的参考资料都说你应该打电话给Wait。
这是一个简单的控制台应用程序,显示我不需要 Wait 语句,因此我将其注释掉。不管我注释掉tsk.Wait(),输出都是一样的。
所有情况下的预期输出如下:
主线程启动。 运行 MyTask 后。结果为真 运行 SumIt 后。结果是 1 主线程结束。代码:
class Program
{
// A trivial method that returns a result and takes no arguments.
static bool MyTask()
{
Thread.Sleep(2000);
return true;
}
// This method returns the summation of a positive integer
// which is passed to it.
static int SumIt(object v)
{
int x = (int)v;
int sum = 0;
for (; x > 0; x--)
sum += x;
return sum;
}
static void Main(string[] args)
{
Console.WriteLine("Main thread starting.");
// Construct the first task.
Task<bool> tsk = Task<bool>.Factory.StartNew(() => MyTask());
// I found this Wait statement to be completely unnecessary.
//tsk.Wait();
Console.WriteLine("After running MyTask. The result is " +
tsk.Result);
// Construct the second task.
Task<int> tsk2 = Task<int>.Factory.StartNew(() => SumIt(1));
Console.WriteLine("After running SumIt. The result is " +
tsk2.Result);
tsk.Dispose();
tsk2.Dispose();
Console.WriteLine("Main thread ending.");
Console.ReadLine();
}
}
【问题讨论】:
标签: c# parallel-processing task wait task-parallel-library