protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { #if XAMARIN_MODERN Volatile.Write (ref sentRequest, true); #endif var headers = request.Headers as IEnumerable<KeyValuePair<string, IEnumerable<string>>>; var ms = new MemoryStream(); if (request.Content != null) { await request.Content.CopyToAsync(ms).ConfigureAwait(false); headers = headers.Union(request.Content.Headers).ToArray(); } var rq = new NSMutableUrlRequest() { AllowsCellularAccess = true, Body = NSData.FromArray(ms.ToArray()), CachePolicy = (!this.DisableCaching ? NSUrlRequestCachePolicy.UseProtocolCachePolicy : NSUrlRequestCachePolicy.ReloadIgnoringCacheData), Headers = headers.Aggregate(new NSMutableDictionary(), (acc, x) => { acc.Add(new NSString(x.Key), new NSString(String.Join(getHeaderSeparator(x.Key), x.Value))); return acc; }), HttpMethod = request.Method.ToString().ToUpperInvariant(), Url = NSUrl.FromString(request.RequestUri.AbsoluteUri), }; var op = session.CreateDataTask(rq); cancellationToken.ThrowIfCancellationRequested(); var ret = new TaskCompletionSource<HttpResponseMessage>(); cancellationToken.Register(() => ret.TrySetCanceled()); lock (inflightRequests) { inflightRequests[op] = new InflightOperation() { FutureResponse = ret, Request = request, #if !XAMARIN_MODERN Progress = getAndRemoveCallbackFromRegister(request), #endif ResponseBody = new ByteArrayListStream(), CancellationToken = cancellationToken, }; } op.Resume(); return await ret.Task.ConfigureAwait(false); }
protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { #if XAMARIN_MODERN Volatile.Write(ref sentRequest, true); #endif var headers = request.Headers as IEnumerable <KeyValuePair <string, IEnumerable <string> > >; var ms = new MemoryStream(); if (request.Content != null) { await request.Content.CopyToAsync(ms).ConfigureAwait(false); headers = headers.Union(request.Content.Headers).ToArray(); } var rq = new NSMutableUrlRequest() { AllowsCellularAccess = true, Body = NSData.FromArray(ms.ToArray()), CachePolicy = (!this.DisableCaching ? NSUrlRequestCachePolicy.UseProtocolCachePolicy : NSUrlRequestCachePolicy.ReloadIgnoringCacheData), Headers = headers.Aggregate(new NSMutableDictionary(), (acc, x) => { acc.Add(new NSString(x.Key), new NSString(String.Join(getHeaderSeparator(x.Key), x.Value))); return(acc); }), HttpMethod = request.Method.ToString().ToUpperInvariant(), Url = NSUrl.FromString(request.RequestUri.AbsoluteUri), }; var op = session.CreateDataTask(rq); cancellationToken.ThrowIfCancellationRequested(); var ret = new TaskCompletionSource <HttpResponseMessage>(); cancellationToken.Register(() => ret.TrySetCanceled()); lock (inflightRequests) { inflightRequests[op] = new InflightOperation() { FutureResponse = ret, Request = request, #if !XAMARIN_MODERN Progress = getAndRemoveCallbackFromRegister(request), #endif ResponseBody = new ByteArrayListStream(), CancellationToken = cancellationToken, }; } op.Resume(); return(await ret.Task.ConfigureAwait(false)); }