Esempio n. 1
0
        private async Task RunProducerInternalAsync(
            IProducerMethodQueue
            queue, Func <QueueProducerConfiguration, AdditionalMessageData> generateData,
            bool sendViaBatch, IEnumerable <LinqExpressionToRun> jobs, int numberOfJobs)
        {
            if (sendViaBatch)
            {
                var messages = new List <QueueMessage <LinqExpressionToRun, IAdditionalMessageData> >(numberOfJobs);
                messages.AddRange(from job in jobs let data =
                                      generateData(queue.Configuration) select data != null ? new QueueMessage <LinqExpressionToRun, IAdditionalMessageData>(job, data) : new QueueMessage <LinqExpressionToRun, IAdditionalMessageData>(job, null));
                var results = await queue.SendAsync(messages).ConfigureAwait(false);

                Assert.False(results.HasErrors);
            }
            else
            {
                foreach (var job in jobs)
                {
                    var data = generateData(queue.Configuration);
                    if (data != null)
                    {
                        var result = await queue.SendAsync(job, data).ConfigureAwait(false);

                        Assert.False(result.HasError);
                    }
                    else
                    {
                        var result = await queue.SendAsync(job).ConfigureAwait(false);

                        Assert.False(result.HasError);
                    }
                }
            }
        }
Esempio n. 2
0
        /// <inheritdoc />
        public async Task <IJobQueueOutputMessage> SendAsync(IScheduledJob job, DateTimeOffset scheduledTime, Expression <Action <IReceivedMessage <MessageExpression>, IWorkerNotification> > actionToRun, bool rawExpression = false)
        {
            var messageData = new AdditionalMessageData();
            var data        = StartSend(job, scheduledTime, messageData);

            if (data != null)
            {
                return(data);
            }

            var message = await Queue.SendAsync(actionToRun, messageData, rawExpression).ConfigureAwait(false);

            var result = ProcessResult(job, scheduledTime, message);

            if (result != null)
            {
                return(result);
            }
            //try one more time
            result = ProcessResult(job, scheduledTime, await Queue.SendAsync(actionToRun, messageData, rawExpression).ConfigureAwait(false));
            return(result ?? new JobQueueOutputMessage(JobQueuedStatus.Failed));
        }
Esempio n. 3
0
        public static async Task<List<IQueueOutputMessage>> RunDynamicAsync(IProducerMethodQueue queue, int count, Func<IAdditionalMessageData> expiredDataFuture)
        {
            var results = new List<IQueueOutputMessage>(count);
            for (var i = 0; i < count; i++)
            {
                var result = await queue.SendAsync(new LinqExpressionToRun(
                    "(message, workerNotification) => new SampleShared.TestClass().RunMe((IWorkerNotification)workerNotification, \"dynamic\", 2, new SampleShared.SomeInput(DateTime.UtcNow.ToString()))",
                    new List<string> { "SampleShared.dll" }, //additional references
                    new List<string> { "SampleShared" }), expiredDataFuture.Invoke()); //additional using statements
                results.Add(result);
            }

            return results;
        }
Esempio n. 4
0
        public static async Task<List<IQueueOutputMessage>> RunStaticAsync(IProducerMethodQueue queue, int count, Func<IAdditionalMessageData> expiredDataFuture)
        {
            var results = new List<IQueueOutputMessage>(count);
            for (var i = 0; i < count; i++)
            {
                var result = await queue.SendAsync((message, workerNotification) => new TestClass().RunMe(
                    workerNotification,
                    "a string",
                    2,
                    new SomeInput(DateTime.UtcNow.ToString())), expiredDataFuture.Invoke());
                results.Add(result);
            }

            return results;
        }