当我编写以下代码时:
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”有什么区别?
发布于 2012-07-18 22:55:58
您的代码行返回一个Task,而不是Task<string>对象,因为您编写的是ContinueWith,而不是ContinueWith<string>。
一个将来可能对您有所帮助的提示:当您在变量声明中用var替换类型时,可以将鼠标移动到Visual Studio中的var关键字上,将显示一个弹出窗口,其中包含var在代码中隐藏的实际类型。
发布于 2012-07-18 22:56:15
task是对延续的引用,而不是对原始任务的引用(对原始任务的引用作为t传递给延续)。
因为continuation没有返回任何东西,所以它不是一个Task<string>。显然,var可以处理这个问题,这就是为什么您的第二个示例可以工作,而第一个示例不能。
https://stackoverflow.com/questions/11544227
复制相似问题