SignalR“服务器”等待 SignalR 客户端

时间:2021-03-05 10:11:07

标签: c# signalr

我目前正在构建一个带有 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
}

我发现的唯一方法(我的理解肯定有差距,因此请求您的帮助)是这样的:

  • 集线器向客户发送订单;
  • SignalR 客户端在收到帖子时,会进行不同的方法调用;
  • 我在 WebApi 方法中定义了最长等待时间;
  • 在此方法中,我不断查询数据库以查看它是否有新信息。

但是,我认为我设法绕过的方式并不好。

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 客户端发送或将发送的信息。

0 个答案:

没有答案