C# 为什么这是错误的?(C)任务继续进行
当我编写以下代码时:C# 为什么这是错误的?(C)任务继续进行,c#,multithreading,task,C#,Multithreading,Task,当我编写以下代码时: Task<string> task = Task.Factory.StartNew<string>(() => "first task") .ContinueWith(t => { Console.WriteLine(t.Result); Console.WriteLine("second 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");
});
那么一切都好了
为什么?
Task Task和var Task之间有什么不同?您的代码行返回一个Task,而不是Task对象,因为您编写了ContinueWith,而不是ContinueWith
将来可能对您有所帮助的提示:当您在变量声明中用var替换类型时,您可以将鼠标移动到Visual Studio中的var关键字上,将显示一个弹出窗口,其中包含var隐藏在代码中的实际类型。您的代码行返回一个任务,而不是任务对象,因为您编写的是ContinueWith,而不是ContinueWith 将来可能对您有所帮助的提示:当您在变量声明中用var替换类型时,您可以在Visual Studio中将鼠标移到var关键字上,将显示一个弹出窗口,其中包含代码中隐藏的var的实际类型。任务是对延续的引用,而不是原始任务。对原始任务的引用作为t传递给延续 因为continuation不返回任何内容,所以它不是一个任务。显然,var会处理这个问题,这就是为什么第二个示例有效,而第一个示例无效的原因 任务是对延续的引用,而不是对原始任务的引用。对原始任务的引用作为t传递给延续
因为continuation不返回任何内容,所以它不是一个任务。显然,var会处理这个问题,这就是为什么第二个示例有效,而第一个示例无效的原因 “错”和“好”是什么意思?考虑到ContinueWith不返回任务,很可能是编译器错误。但如果OP已经说明了这一点,那会有所帮助=“错”和“好”是什么意思?考虑到ContinueWith不返回任务,很可能是编译器错误。但如果OP已经说明了这一点,那会有所帮助=+如果可以的话,我会说两次,因为我指出不要简单地将var用作失火和遗忘设备。+1如果可以的话,我会说两次,因为我指出不要简单地将var用作失火和遗忘设备。