private void SetChangeSetProperty(ODataDomainChangeSetProperty changeSetProperty) { foreach (HttpRequestMessage request in this.Requests) { request.Properties.Add("Microsoft.Restier.Submit.ChangeSet", changeSetProperty); } }
/// <summary> /// Asynchronously sends the request. /// </summary> /// <param name="invoker">The invoker.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>The task object that contains the batch response.</returns> public override async Task <ODataBatchResponseItem> SendRequestAsync( HttpMessageInvoker invoker, CancellationToken cancellationToken) { Ensure.NotNull(invoker, "invoker"); ODataDomainChangeSetProperty changeSetProperty = new ODataDomainChangeSetProperty(this); changeSetProperty.ChangeSet = new ChangeSet(); this.SetChangeSetProperty(changeSetProperty); Dictionary <string, string> contentIdToLocationMapping = new Dictionary <string, string>(); List <Task <HttpResponseMessage> > responseTasks = new List <Task <HttpResponseMessage> >(); foreach (HttpRequestMessage request in Requests) { responseTasks.Add(SendMessageAsync(invoker, request, cancellationToken, contentIdToLocationMapping)); } // the responseTasks will be complete after: // - the ChangeSet is submitted // - the responses are created and // - the controller actions have returned await Task.WhenAll(responseTasks); List <HttpResponseMessage> responses = new List <HttpResponseMessage>(); try { foreach (Task <HttpResponseMessage> responseTask in responseTasks) { HttpResponseMessage response = responseTask.Result; if (response.IsSuccessStatusCode) { responses.Add(response); } else { DisposeResponses(responses); responses.Clear(); responses.Add(response); return(new ChangeSetResponseItem(responses)); } } } catch { DisposeResponses(responses); throw; } return(new ChangeSetResponseItem(responses)); }
/// <summary> /// Asynchronously sends the request. /// </summary> /// <param name="invoker">The invoker.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>The task object that contains the batch response.</returns> public override async Task<ODataBatchResponseItem> SendRequestAsync( HttpMessageInvoker invoker, CancellationToken cancellationToken) { Ensure.NotNull(invoker, "invoker"); ODataDomainChangeSetProperty changeSetProperty = new ODataDomainChangeSetProperty(this); changeSetProperty.ChangeSet = new ChangeSet(); this.SetChangeSetProperty(changeSetProperty); Dictionary<string, string> contentIdToLocationMapping = new Dictionary<string, string>(); List<Task<HttpResponseMessage>> responseTasks = new List<Task<HttpResponseMessage>>(); foreach (HttpRequestMessage request in Requests) { responseTasks.Add(SendMessageAsync(invoker, request, cancellationToken, contentIdToLocationMapping)); } // the responseTasks will be complete after: // - the ChangeSet is submitted // - the responses are created and // - the controller actions have returned await Task.WhenAll(responseTasks); List<HttpResponseMessage> responses = new List<HttpResponseMessage>(); try { foreach (Task<HttpResponseMessage> responseTask in responseTasks) { HttpResponseMessage response = responseTask.Result; if (response.IsSuccessStatusCode) { responses.Add(response); } else { DisposeResponses(responses); responses.Clear(); responses.Add(response); return new ChangeSetResponseItem(responses); } } } catch { DisposeResponses(responses); throw; } return new ChangeSetResponseItem(responses); }