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。
我有以下内容:
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。