1

当我编写以下代码时:

 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");
                 });

然后一切正常!

为什么?

“Task task”和“var task”有什么区别?</p>

4

2 回答 2

6

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

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

于 2012-07-18T14:55:57.870 回答
2

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

Since the continuation doesn't return anything its not a Task<string>. Obviously var handles this which is why your second example works and the first doesn't.

于 2012-07-18T14:56:15.417 回答