public void Consume(IConsumeContext <ExecuteHttpRequest> context) { Console.WriteLine("Sending Request to {0}", context.Message.Url); try { var cancellationTokenSource = new CancellationTokenSource(); cancellationTokenSource.CancelAfter(30000); DateTime startTime = DateTime.UtcNow; Stopwatch timer = Stopwatch.StartNew(); Task task = _client.GetAsync(context.Message.Url, HttpCompletionOption.ResponseHeadersRead, cancellationTokenSource.Token) .ContinueWith(x => { timer.Stop(); Console.WriteLine("Request completing as {0} ({1})", x.Result.StatusCode, context.Message.Url); if (x.Result.IsSuccessStatusCode) { context.Respond(new HttpRequestSucceededEvent(x.Result.StatusCode)); context.NotifyResourceUsageCompleted(context.Message.Url, startTime, timer.Elapsed); } else { context.Respond(new HttpRequestFaultedEvent(x.Result.StatusCode)); context.NotifyResourceUsageFailed(context.Message.Url, x.Result.ReasonPhrase); } x.Result.Dispose(); }, TaskContinuationOptions.OnlyOnRanToCompletion) .ContinueWith( x => { context.Respond( new HttpRequestFaultedEvent(HttpStatusCode.InternalServerError)); }, TaskContinuationOptions.OnlyOnFaulted); task.Wait(cancellationTokenSource.Token); } catch (Exception ex) { context.GenerateFault(ex); } }