为什么这是错的? (C#Task ContinueWith)

时间:2012-07-18 14:52:58

标签: c# multithreading task

当我写下面代码时:

 Task<string> task = Task.Factory.StartNew<string>(() => "first task")
         .ContinueWith(t =>
                 {
                     Console.WriteLine(t.Result);
                     Console.WriteLine("second task");
                 });

那是错的!

然后我将其更改为:

 var  task = Task.Factory.StartNew<string>(() => "first task")
         .ContinueWith(t =>
                 {
                     Console.WriteLine(t.Result);
                     Console.WriteLine("second task");
                 });

然后一切都好!

为什么?

“任务任务”和“var任务”有什么不同?

2 个答案:

答案 0 :(得分:6)

您的代码行返回Task,而不是Task<string>对象,因为您编写了ContinueWith,而不是ContinueWith<string>

可以在将来帮助您的提示:在变量声明中用var替换类型时,可以将鼠标移到Visual Studio中的var关键字上,弹出窗口将在代码中显示var 隐藏的实际类型。

答案 1 :(得分:2)

task是对延续而不是原始任务的引用(对原始任务的引用作为t传递给延续)。

由于延续不会返回任何不是Task<string>的内容。显然var处理这个问题,这就是为什么你的第二个例子有效,而第一个例子没有。