Пример #1
0
        private async Task RunAsync(HandlerDelegate handlerDelegate, CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                CloudQueueMessage message = null;
                try {
                    message = await queue.GetMessageAsync();

                    var context = new AzureStorageQueueMessageContext {
                        MessageId      = message.Id,
                        MessageHeaders = new Dictionary <string, string>()
                    };
                    await handlerDelegate(message.AsString, context);

                    await queue.DeleteMessageAsync(message);
                } catch (StorageException exception) {
                    if (exception.IsNotFoundQueueNotFound() ||
                        exception.IsConflictQueueBeingDeletedOrDisabled() ||
                        exception.IsServerSideError())
                    {
                        await queue.DeleteMessageAsync(message);
                    }
                    else
                    {
                        throw;
                    }
                } catch (Exception e) {
                    exceptionHandler.HandleException(ExceptionDispatchInfo.Capture(e));
                }
                await Task.Delay(delayStrategy.Next(message != null), cancellationToken);
            }
        }