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用作失火和遗忘设备。