protected override async Task SerializeToStreamAsync(Stream stream, TransportContext context) { // First write out content to local file asynchronously string fileName = Guid.NewGuid().ToString("D"); string filePath = Path.Combine(_outputPath, fileName); using (FileStream fStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None, BufferSize, useAsync: true)) { await InnerContent.CopyToAsync(fStream); } // Now write out content to actual output stream await InnerContent.CopyToAsync(stream); // Invoke content processor so that it can process the content asynchonously try { await _contentProcessor(filePath); } finally { // We are done with the local file and can delete it. File.Delete(filePath); } }
protected override Task SerializeToStreamAsync(Stream stream, TransportContext context) { if (SerializeToStreamAsyncCallback != null) { return(SerializeToStreamAsyncCallback(stream, context)); } else if (InnerContent != null) { return(InnerContent.CopyToAsync(stream, context)); } else { throw new InvalidOperationException("Construct with inner HttpContent or set SerializeToStreamCallback first."); } }