private async Task BroadcastMessages(RaceStream message) { foreach (var subscriber in _subscribers.Values) { var item = await SendMessageToSubscriber(subscriber, message); if (item != null) { RemoveSubscriber(item); } ; } }
public ValueTask <bool> Enqueue(RaceStream rs) { async Task <bool> AsyncSlowPath(RaceStream thing) { while (await _writer.WaitToWriteAsync()) { if (_writer.TryWrite(thing)) { return(true); } } return(false); // Channel was completed during the wait } return(_writer.TryWrite(rs) ? new ValueTask <bool>(true) : new ValueTask <bool>(AsyncSlowPath(rs))); }
private async Task <Subscriber> SendMessageToSubscriber(Subscriber subscriber, RaceStream message) { try { //_logger.LogInformation($"Broadcasting: {message.Name} - {message.Message}"); await subscriber.Enqueue(message); return(null); } catch (Exception ex) { //_logger.LogError(ex, "Could not send"); return(subscriber); } }
public async Task BroadcastMessageAsync(RaceStream message) { await BroadcastMessages(message); }