SignalR OnConnected() 中的异步方法

Async Method in SignalR OnConnected()

我有以下内容:

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

按照有关 "don't block a hub method" 的指导,我正在尝试等待 HandleConnectionAsync 呼叫,但如果我使用 async,我将得到以下结果:

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

但是我不会退回任何东西。正确的做法是什么?

But then I'm not returning anything. What's the right way to do this?

您不需要 return 任何东西。 async Task 是(同步)void 的异步等价物。 Task 表示没有 return 值,因此您的代码已经正确。

换句话说:async 将为您构建 returned Task/Task<T>。因此,如果您的方法 而不是 具有 async(如您的第一个示例),则您需要 return 一项任务;但是如果你的方法确实async(如你的第二个例子),那么你没有。

如果您 await HandleConnectionAsync(Context); 该方法将 return 直到该部分完成。

如果您不想 "block" 集线器方法,只需远程 Wait() 部分:

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

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