コード例 #1
0
        internal async Task Run()
        {
            var processedCount = 0;

            while (processedCount < _batchCount)
            {
                MailboxMessage processingMessage = null;
                try
                {
                    if (MessageQueue.TryDequeue(out processingMessage))
                    {
                        processedCount++;
                        await processingMessage.Task().ConfigureAwait(false);

                        processingMessage.TaskCompletionSource
                        .TrySetResult(null);
                    }
                    else
                    {
                        break;
                    }
                }
                catch (Exception ex)
                {
                    processingMessage?.TaskCompletionSource
                    .TrySetException(ex);
                }
            }

            ExitHandlingMessage();
        }
コード例 #2
0
        internal async Task Run()
        {
            var processedCount = 0;

            while (processedCount < _batchCount)
            {
                MailboxMessage processingMessage = null;
                try
                {
                    if (MessageQueue.TryDequeue(out processingMessage))
                    {
                        processedCount++;
                        var task = await Task.Run <Task>(() => processingMessage.Task())
                                   .ConfigureAwait(false);

                        await task.ConfigureAwait(false);

                        object returnValue = null;
                        if (processingMessage.HasReturnValue)
                        {
                            returnValue = ((dynamic)task).Result;
                        }
                        processingMessage.TaskCompletionSource
                        .TrySetResult(returnValue);
                    }
                    else
                    {
                        break;
                    }
                }
                catch (Exception ex)
                {
                    processingMessage?.TaskCompletionSource
                    .TrySetException(ex);
                }
            }

            ExitHandlingMessage();
        }