コード例 #1
0
		public Task SerializeAsync(HttpRequestMessage request, Stream stream)
		{
			if (request.Content != null)
			{
				return request.Content.LoadIntoBufferAsync()
					.Then(() =>
					{
						var httpMessageContent = new HttpMessageContent(request);
						// All in-memory and CPU-bound so no need to async
						httpMessageContent.ReadAsByteArrayAsync().Then(
							buffer =>
							{
								return Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite,
									buffer, 0, buffer.Length, null, TaskCreationOptions.AttachedToParent);
							});
					});
			}
			else
			{
				var httpMessageContent = new HttpMessageContent(request);
				// All in-memory and CPU-bound so no need to async
				return httpMessageContent.ReadAsByteArrayAsync().Then(
					buffer =>
					{
						return Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite,
							  buffer, 0, buffer.Length, null, TaskCreationOptions.AttachedToParent);
					}
					);

			}

		}
コード例 #2
0
        public Task SerializeAsync(Task<HttpResponseMessage> response, Stream stream)
        {
            return response.Then(r =>
            {
                if (r.Content != null)
                {
                    TraceWriter.WriteLine("SerializeAsync - before load",
                        TraceLevel.Verbose);

                    return r.Content.LoadIntoBufferAsync()
                        .Then(() =>
                        {
                            TraceWriter.WriteLine("SerializeAsync - after load", TraceLevel.Verbose);
                            var httpMessageContent = new HttpMessageContent(r);
                            // All in-memory and CPU-bound so no need to async
                            return httpMessageContent.ReadAsByteArrayAsync();
                        })
                        .Then( buffer =>
                                    {
                                        TraceWriter.WriteLine("SerializeAsync - after ReadAsByteArrayAsync", TraceLevel.Verbose);
                                        return Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite,
                                            buffer, 0, buffer.Length, null, TaskCreationOptions.AttachedToParent);
                                    }
                                );

                        ;
                }
                else
                {
                    TraceWriter.WriteLine("Content NULL - before load",
                        TraceLevel.Verbose);

                    var httpMessageContent = new HttpMessageContent(r);
                    // All in-memory and CPU-bound so no need to async
                    var buffer = httpMessageContent.ReadAsByteArrayAsync().Result;
                    return Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite,
                        buffer, 0, buffer.Length, null, TaskCreationOptions.AttachedToParent);
                }
            }
                );
        }
コード例 #3
0
 public async Task SerializeAsync(Task<HttpResponseMessage> response, Stream stream)
 {
     var r = await response;
     if (r.Content != null)
     {
         await r.Content.LoadIntoBufferAsync();
         var httpMessageContent = new HttpMessageContent(r);
         // All in-memory and CPU-bound so no need to async
         var buffer = await httpMessageContent.ReadAsByteArrayAsync();
         await Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite,
             buffer, 0, buffer.Length, null, TaskCreationOptions.AttachedToParent);
     }
     else
     {
         var httpMessageContent = new HttpMessageContent(r);
         // All in-memory and CPU-bound so no need to async
         var buffer = await httpMessageContent.ReadAsByteArrayAsync();
         await Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite,
             buffer, 0, buffer.Length, null, TaskCreationOptions.AttachedToParent);
     }
 }