public async Task ExecutePendingActions() { _clearToSend.TrySetResult(this); Func <Task>[] pendingActions; lock (_pendingActions) pendingActions = _pendingActions.ToArray(); foreach (Func <Task> action in pendingActions) { var task = action(); if (task != null) { await task.ConfigureAwait(false); } } if (_outboxSchedulerContext != null) { try { await _outboxSchedulerContext.ExecutePendingActions().ConfigureAwait(false); } catch (Exception e) { LogContext.Warning?.Log(e, "One or more messages could not be unscheduled.", e); } } }
public async Task ExecutePendingActions(bool concurrentMessageDelivery) { _clearToSend.TrySetResult(this); Func <Task>[] pendingActions; lock (_pendingActions) pendingActions = _pendingActions.ToArray(); if (pendingActions.Length > 0) { if (concurrentMessageDelivery) { var collection = new PendingTaskCollection(pendingActions.Length); collection.Add(pendingActions.Select(action => action())); await collection.Completed().ConfigureAwait(false); } else { foreach (Func <Task> action in pendingActions) { var task = action(); if (task != null) { await task.ConfigureAwait(false); } } } } if (_outboxSchedulerContext != null) { try { await _outboxSchedulerContext.ExecutePendingActions().ConfigureAwait(false); } catch (Exception e) { LogContext.Warning?.Log(e, "One or more messages could not be unscheduled.", e); } } }