private async Task SubmitResponseAsync(RequestContents <TRequest> requestContents, TResponse response, CancellationToken cancellationToken)
        {
            var responseQueue = cloudQueueClient.GetQueueReference(requestContents.ResponseQueueName);

            var responseContents = new ResponseContents <TResponse>
            {
                RequestId = requestContents.RequestId,
                Response  = response
            };

            var responseJson = JsonConvert.SerializeObject(responseContents);

            var responseMessage = new CloudQueueMessage(responseJson);

            await responseQueue.AddMessageAsync(responseMessage, cancellationToken);
        }
        /// <summary>
        /// Submits a request for the workers to process
        /// </summary>
        public async Task <TResponse> SubmitRequestAsync(TRequest request, TimeSpan requestTimeout)
        {
            var requestContents = new RequestContents <TRequest>
            {
                RequestId         = Guid.NewGuid(),
                ResponseQueueName = responseQueueName,
                Request           = request
            };

            var jsonContents = JsonConvert.SerializeObject(requestContents);
            var cloudMessage = new CloudQueueMessage(jsonContents);
            await requestQueue.AddMessageAsync(cloudMessage);

            Task <TResponse> responseTask = responseRetriever.SubmitRequest(requestContents, requestTimeout);

            return(await responseTask);
        }
Exemple #3
0
        public Task <TResponse> SubmitRequest(RequestContents <TRequest> requestContents, TimeSpan timeout)
        {
            if (requestContents == null)
            {
                throw new ArgumentNullException("requestContents");
            }

            var completionSource = new TaskCompletionSource <TResponse>();

            completionSources[requestContents.RequestId] = new TimeoutAndCompletionSource
            {
                TimeoutDateTimeOffset = DateTimeOffset.UtcNow + timeout,
                TaskCompletionSource  = completionSource
            };

            GuaranteeRetrievalTaskRunning();

            return(completionSource.Task);
        }