如何在返回Task的方法中调用异步方法?

时间:2017-08-31 06:09:45

标签: c# async-await signalr

在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的异步方法,a   返回的关键字后面不能跟一个对象表达式。你是否   打算返回Task<T>

我该如何解决?感谢。

1 个答案:

答案 0 :(得分:10)

编译器将async方法转换为状态机。你不能return Task这里,因为返回的Task是由编译器生成的,代表了此方法的 continuation

简单await base来电:

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