protected virtual async Task SendMessageToUserAsync(ChatMessage chatMessage) { var onlineClientContext = new OnlineClientContext(chatMessage.TenantId, chatMessage.ToUserId.GetValueOrDefault()); var onlineClients = OnlineClientManager.GetAllByContext(onlineClientContext); foreach (var onlineClient in onlineClients) { try { var signalRClient = Clients.Client(onlineClient.ConnectionId); if (signalRClient == null) { Logger.LogDebug("Can not get user " + onlineClientContext.UserId + " with connectionId " + onlineClient.ConnectionId + " from SignalR hub!"); continue; } await signalRClient.SendAsync("getChatMessage", chatMessage, cancellationToken : Context.ConnectionAborted); } catch (Exception ex) { // 发送异常记录就行了,因为消息已经持久化 Logger.LogWarning("Could not send message to user: {0}", chatMessage.ToUserId); Logger.LogWarning("Send to user message error: {0}", ex.Message); } } }
protected virtual async Task SendMessageToUserAsync(ChatMessage chatMessage) { var onlineClientContext = new OnlineClientContext(chatMessage.TenantId, chatMessage.ToUserId.GetValueOrDefault()); var onlineClients = OnlineClientManager.GetAllByContext(onlineClientContext); // 需要捕捉每一个发送任务的异常吗? // var onlineClientConnections = onlineClients.Select(c => c.ConnectionId).ToImmutableList(); // var signalRClient = Clients.Clients(onlineClientConnections); // await signalRClient.SendAsync("getChatMessage", chatMessage); foreach (var onlineClient in onlineClients) { try { var signalRClient = Clients.Client(onlineClient.ConnectionId); if (signalRClient == null) { Logger.LogDebug("Can not get user " + onlineClientContext.UserId + " with connectionId " + onlineClient.ConnectionId + " from SignalR hub!"); continue; } await signalRClient.SendAsync("getChatMessage", chatMessage); } catch (Exception ex) { Logger.LogWarning("Could not send message to user: {0}", chatMessage.ToUserId); Logger.LogWarning("Send to user message error: {0}", ex.Message); } } }