我实现了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;
}
字符串
1条答案
按热度按时间pftdvrlh1#
为了避免使用延迟,你应该沿着下面的方式实现一些东西。
字符串
然后,您可以根据用例调用
await GetSocketResult(...)
或GetSocketResult(...).Wait()
。