首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这是错误的?(C#任务ContinueWith)

为什么这是错误的?(C#任务ContinueWith)
EN

Stack Overflow用户
提问于 2012-07-18 22:52:58
回答 2查看 1.1K关注 0票数 1

当我编写以下代码时:

代码语言:javascript
运行
复制
 Task<string> task = Task.Factory.StartNew<string>(() => "first task")
         .ContinueWith(t =>
                 {
                     Console.WriteLine(t.Result);
                     Console.WriteLine("second task");
                 });

这是错误的!

然后我将其更改为:

代码语言:javascript
运行
复制
 var  task = Task.Factory.StartNew<string>(() => "first task")
         .ContinueWith(t =>
                 {
                     Console.WriteLine(t.Result);
                     Console.WriteLine("second task");
                 });

然后一切都好了!

为什么?

"Task task“和"var task”有什么区别?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-18 22:55:58

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

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

票数 6
EN

Stack Overflow用户

发布于 2012-07-18 22:56:15

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

因为continuation没有返回任何东西,所以它不是一个Task<string>。显然,var可以处理这个问题,这就是为什么您的第二个示例可以工作,而第一个示例不能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11544227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档