当我写下面代码时:
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任务”有什么不同?
答案 0 :(得分:6)
您的代码行返回Task
,而不是Task<string>
对象,因为您编写了ContinueWith
,而不是ContinueWith<string>
。
可以在将来帮助您的提示:在变量声明中用var
替换类型时,可以将鼠标移到Visual Studio中的var
关键字上,弹出窗口将在代码中显示var
隐藏的实际类型。
答案 1 :(得分:2)
task
是对延续而不是原始任务的引用(对原始任务的引用作为t
传递给延续)。
由于延续不会返回任何不是Task<string>
的内容。显然var
处理这个问题,这就是为什么你的第二个例子有效,而第一个例子没有。