加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 返回正在使用另一个异步函数的异步任务

发布时间:2020-12-15 19:38:49 所属栏目:百科 来源:网络整理
导读:我试图在使用异步功能的函数中返回Task paremeter并遇到麻烦. 这是我的代码: private async Taskint GetIntAsync() { return Taskint.Factory.StartNew(async () = { await func(); some code.. return 123; }); } 我得到错误:“无法将异步lambda表达式转
我试图在使用异步功能的函数中返回Task paremeter并遇到麻烦.

这是我的代码:

private async Task<int> GetIntAsync()
 {
   return Task<int>.Factory.StartNew(async () =>
   {
       await func();

       some code..

       return 123;
   });

 }

我得到错误:“无法将异步lambda表达式转换为委托类型”..

有没有办法从新任务调用异步功能?

解决方法

我想展示如何纠正初始语法以解决编译器错误,并保持GetIntAsync方法的相同签名:

private async Task<int> GetIntAsync()
{
    return await Task.Factory.StartNew(async () =>
    {
        await Task.Delay(42);
        return 123;
    }).Unwrap();
}

这是相同的代码,更明确的输入,所以你可以更好地了解发生了什么:

private async Task<int> GetIntAsync()
{
    Func<Task<int>> lambda = async () =>
    {
        await Task.Delay(42);
        return 123;
    };

    Task<Task<int>> outerTask = Task.Factory.StartNew(lambda);

    Task<int> innerTask = outerTask.Unwrap();

    return await innerTask;
}

实际上,这种方法是不必要的复杂,你有一个冗余等待. @ user2720372的answer建议使用Task.Run创建任务的正确方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读