【问题标题】:How to call async method in a method that returns Task?如何在返回Task的方法中调用异步方法?
【发布时间】:2017-08-31 18:18:54
【问题描述】:

在 SignalR 集线器中,我有这个:

public class MyHub : Hub
{
    public override Task OnConnected()
    {
        // my async code here
        return base.OnConnected();
    }
}

我想执行异步代码。所以我添加了async这样的关键字:

public class MyHub : Hub
{
    public override async Task OnConnected()
    {
        var result = await MyAsyncMethod();
        return base.OnConnected();
    }
}

return base.OnConnected(); 显示此错误:

由于 MyHub.OnConnected() 是一个返回 Task 的异步方法,因此 返回的关键字后面不能跟对象表达式。你是否 打算返回Task<T>

我该如何解决?谢谢。

【问题讨论】:

    标签: c# async-await signalr


    【解决方案1】:

    async 方法被编译器转换为状态机。这里不能return那个Task,因为返回的Task是编译器生成的,代表这个方法的延续

    只需awaitbase 调用:

    public override async Task OnConnected()
    {
        var result = await MyAsyncMethod();
        await base.OnConnected();
    }
    

    【讨论】:

    • 谢谢,它成功了。如果我没记错的话,OnConnected() 并没有改变,仍然是调用者方法的任务?
    • @Blendester 是的。
    猜你喜欢
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2014-12-03
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多