public static async Task SendMessageToSubscriptions <T>(this FutureConsumeContext context, IEnumerable <FutureSubscription> subscriptions, T message) where T : class { List <Task> tasks = subscriptions.Select(async sub => { var endpoint = await context.GetSendEndpoint(sub.Address).ConfigureAwait(false); if (sub.RequestId.HasValue) { var pipe = new FutureResultPipe <T>(sub.RequestId.Value); await endpoint.Send(message, pipe, context.CancellationToken).ConfigureAwait(false); } else { await endpoint.Send(message, context.CancellationToken).ConfigureAwait(false); } }).ToList(); await Task.WhenAll(tasks).ConfigureAwait(false); }
public static async Task <T> SendMessageToSubscriptions <T>(this FutureConsumeContext context, IEnumerable <FutureSubscription> subscriptions, IMessageInitializer <T> initializer, InitializeContext <T> initializeContext, object values) where T : class { List <Task <T> > tasks = subscriptions.Select(async sub => { var endpoint = await context.GetSendEndpoint(sub.Address).ConfigureAwait(false); if (sub.RequestId.HasValue) { var pipe = new FutureResultPipe <T>(sub.RequestId.Value); return(await initializer.Send(endpoint, initializeContext, values, pipe).ConfigureAwait(false)); } return(await initializer.Send(endpoint, initializeContext, values).ConfigureAwait(false)); }).ToList(); T[] messages = await Task.WhenAll(tasks).ConfigureAwait(false); return(messages.FirstOrDefault()); }