实现wait或WebSocket响应的最佳方法是什么

zzzyeukh  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(107)

我实现了async await方法来获取相应的socket,我用Task.Delay实现了它 有没有更好的实现来获得结果时,套接字刚刚到达,没有任务.延迟
我将所有套接字响应保存在字典中

WebSocket socket;

await sSocket.SendAsync(new ArraySegment<byte>(binaryMessage, 0, binaryMessage.Length), WebSocketMessageType.Text, true, CancellationToken.None);

var result = await GetSocketResult(requestId);

private Dictionary<string,SocketResult> socketsResults { get; set; } = new();

     private async Task<string> GetSocketResult(string requestId)
        {
            byte maxSec = 60;
            byte counter = 0;
            byte skip = 2;

            do
            {
                string json = string.Empty;
                if(socketsResults.TryGetValue(requestId, out var res))
                {
                    json = res.Json;    
                }
               
                if (res != null)
                {
                    socketsResults.Remove(res.RequestId);

                    // remove old sockets
                    _ = Task.Run(() =>
                    {
                        var dt = DateTime.UtcNow.AddMinutes(-1);
                        foreach (var item in socketsResults)
                        {
                            if (item.Value.Created > dt)
                            {
                                socketsResults.Remove(item.Key);
                            }
                        }
                    });

                    return json;
                }
                counter += skip;
                await Task.Delay(skip * 1000);
            } while (counter < maxSec);

            return null;
        }

字符串

pftdvrlh

pftdvrlh1#

为了避免使用延迟,你应该沿着下面的方式实现一些东西。

var task = Task.Run(() => stuff);
await Task.WhenAll(task);
//next step

字符串
然后,您可以根据用例调用await GetSocketResult(...)GetSocketResult(...).Wait()

相关问题