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(); }
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(); }