我目前正在构建一个带有 SignalR 中心的 .NET Core WebAPI,该中心向一个或多个 SignalR 客户端发送请求。
此时,我需要向 SignalR 客户端发送请求并等待它返回信息,但在向客户端发送请求的相同方法中等待,如下所示:
public async Task<MyObject> GetItemStock() {
await _myHubSignalR.Clients.Client(connectionId).SendAsync("MethodMessage", "ItemStockByItemId-001|pendingProcessId=34243243242342");
// ^ I want await here until received the stock of itemId 001
}
我发现的唯一方法(我的理解肯定有差距,因此请求您的帮助)是这样的:
但是,我认为我设法绕过的方式并不好。
public async Task<MyObject> GetItemStock() {
await _myHubSignalR.Clients.Client(connectionId).SendAsync("MethodMessage", "ItemStockByItemId-001|pendingProcessId=34243243242342");
int awaitSeconds = 20000;
int maxWait = 0;
bool continueAwait = true;
string result = "";
while (continueAwait) {
maxWait += 3000;
Thread.Sleep(3000);
result = await Task.Run(() => {
return myProvider.SeeHasNewDataOnDataBase(pendingProcessId);
});
if (result != "" || maxWait > awaitSeconds) {
myProvider.DeletePreviusDataFromDataBase(pendingProcessId);
return result;
}
}
这个想法是使用将请求发送到 SignalR 客户端的方法,并在相同的方法中获取 SignalR 客户端发送或将发送的信息。