You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 4.0环境下Task调用ContinueWith访问Result属性报编译错误如何解决?

错误原因分析

你遇到的编译错误是因为Task.Factory.StartNew的重载匹配问题:

  • 你的_someObject.Start()方法返回bool值,按逻辑应该返回泛型类型Task<bool>,该类型才有Result属性
  • 但.NET 4.0的重载匹配规则下,你当前的写法命中了非泛型的StartNew重载,返回值是基础类Task,这个类本身没有定义Result属性,因此编译器抛出CS1061错误。
解决方案

有两种常用修改方式可以解决问题:

方式1:显式指定StartNew的泛型参数

强制调用泛型版本的StartNew<TResult>重载,直接返回Task<bool>类型:

Task.Factory.StartNew<bool>(
     () => _someObject.Start(), 
     CancellationToken.None, 
     TaskCreationOptions.None, 
     TaskScheduler.Default)
  .ContinueWith(
     prevTask => FollowUpAction(prevTask.Result), 
     Dispatcher.CurrentDispatcher);

方式2:显式声明前序任务类型

通过变量声明强制编译器做类型校验,触发正确的泛型重载匹配:

Task<bool> workerTask = Task.Factory.StartNew(
     () => _someObject.Start(), 
     CancellationToken.None, 
     TaskCreationOptions.None, 
     TaskScheduler.Default);
workerTask.ContinueWith(
     prevTask => FollowUpAction(prevTask.Result), 
     Dispatcher.CurrentDispatcher);
注意事项

.NET 4.0中任务未捕获的异常会在垃圾回收时触发进程崩溃,建议在ContinueWith的回调中补充异常处理逻辑,判断前序任务的IsFaulted、IsCanceled属性,避免未处理异常。

内容的提问来源于stack exchange,提问作者Santhosh Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:06:08