当调用 IHubContext<>.Clients.All.SendAsync 函数等待时间超过 5 分钟时,可能会出现连接丢失或连接超时的问题。为了避免这种情况,可以在 SendAsync 函数中添加 CancellationToken,并检查发送操作是否已取消。另外,可以考虑使用后台任务或队列来处理发送操作,以解决连接超时的问题。
以下是示例代码:
public async Task SendMessageAsync(string message, CancellationToken cancellationToken = default)
{
var task = Task.Run(async () => {
await _hubContext.Clients.All.SendAsync("ReceiveMessage", message, cancellationToken);
}, cancellationToken);
await Task.WhenAny(task, Task.Delay(TimeSpan.FromMinutes(5), cancellationToken));
if (cancellationToken.IsCancellationRequested)
{
// 操作已取消
return;
}
// 操作已完成,处理结果
}