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

如何从Task获取返回值?Task<TResult>语法及编译问题求助

带返回值的Task与ContinueWith语法问题

我有一个需要返回值的Task,要将返回值传递给ContinueWith方法,但不清楚Task/Func的正确语法。

当前代码

var task = new Task(CreateAction(token), token, TaskCreationOptions.AttachedToParent);
task.ContinueWith(_ => {/*...*/});
//...

Action CreateAction(CancellationToken cancellationToken)
{
    return async () => 
    {
       //... 
       // 需要修改此方法以返回bool值
    }
}

尝试修改后无法编译的代码

var task = new Task<bool>(CreateAction(token), token, TaskCreationOptions.AttachedToParent);
task.ContinueWith((theReturnValue) => {/*...*/});
//...

Func<bool> CreateAction(CancellationToken cancellationToken)
{
    return async () => 
    {
       //... 
       return true; // 示例硬编码返回值
    }
}

问题原因与解决方案

你的代码编译失败的核心原因是:async修饰的匿名方法返回值会被编译器自动包装为Task类型。你声明的Func<bool>实际上会被隐式转换为Func<Task<bool>>,但创建Task<bool>时要求传入的委托是Func<bool>(同步返回bool),类型不匹配导致编译错误。

正确写法

修改CreateAction的返回类型为Func<Task<bool>>,并通过Unwrap()展开嵌套的Task,这样就能在ContinueWith中获取到最终的bool返回值:

var task = new Task<Task<bool>>(CreateAction(token), token, TaskCreationOptions.AttachedToParent).Unwrap();
task.ContinueWith(t => {
    bool result = t.Result;
    // 在这里处理返回值
});
//...

Func<Task<bool>> CreateAction(CancellationToken cancellationToken)
{
    return async () => 
    {
       // 执行你的异步操作,比如await某个任务
       await Task.Delay(100);
       return true; // 返回实际的bool结果
    }
}

更简洁的替代方案(推荐)

如果业务场景允许,直接使用Task.Factory.StartNew结合Unwrap,可以避免手动创建嵌套Task:

var task = Task.Factory.StartNew(CreateAction(token), token, TaskCreationOptions.AttachedToParent, TaskScheduler.Current).Unwrap();
task.ContinueWith(t => {
    bool result = t.Result;
    // 处理逻辑
});
//...

Func<Task<bool>> CreateAction(CancellationToken cancellationToken)
{
    return async () => 
    {
       await Task.Delay(100);
       return true;
    }
}

关键说明

  • 当委托包含async修饰时,必须确保委托的返回类型与async方法的实际返回值匹配:async方法返回Task<T>对应Func<Task<T>>,返回Task对应Func<Task>。
  • 使用Unwrap()可以将Task<Task<T>>转换为Task<T>,简化后续对返回值的处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:35:27