예제 #1
0
        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);
        }
예제 #2
0
        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());
        }