SignalR OnConnected()中的异步方法

时间:2016-10-26 05:39:52

标签: c# .net asynchronous signalr

我有以下内容:

    public override Task OnConnected() {
        HandleConnectionAsync(Context).Wait();
        return base.OnConnected();
    }

在遵循"不要阻止中心方法的指导下,我试图等待HandleConnectionAsync来电,但如果我使用async ,我最终得到以下结论:

    public override async Task OnConnected() {
        await HandleConnectionAsync(Context);
        await base.OnConnected();
    }

但是我没有回复任何东西。什么是正确的方法?

2 个答案:

答案 0 :(得分:3)

  

但是我没有回复任何东西。什么是正确的方法?

你不需要退货。 async Task是(同步)void的异步等价物。 Task表示没有返回值,因此您的代码已经正确。

换句话说:async将为您构建返回的Task / Task<T>。因此,如果您的方法具有async(如第一个示例中所示),则需要返回任务;但是如果你的方法 async(如你的第二个例子),那么你就不会。

答案 1 :(得分:0)

如果你await HandleConnectionAsync(Context);,该方法将不会返回,直到该部分结束。

如果你不想“阻止”集线器方法,只需远程Wait()部分:

public override Task OnConnected() 
{
    HandleConnectionAsync(Context);
    base.OnConnected();
}

这样,该方法将在HandleConnectionAsync完成之前立即返回。