public async Task <Stream> MediaCreatingAsync(MediaCreatingContext context, Stream inputStream) { var outStream = new MemoryStream(); await inputStream.CopyToAsync(outStream); return(outStream); }
public async Task DisposesMediaCreatingStreams() { var streams = new List <Stream>(); var creatingEventHandlers = new List <IMediaCreatingEventHandler>() { new TestMediaEventHandler(), new TestMediaEventHandler() }; Stream originalStream = null; var path = String.Empty; // This stream will be disposed by the creating stream, or the finally block. Stream inputStream = null; try { inputStream = new MemoryStream(); originalStream = inputStream; // Add original stream to streams to maintain reference to test disposal. streams.Add(originalStream); var outputStream = inputStream; try { var context = new MediaCreatingContext { Path = path }; foreach (var eventHandler in creatingEventHandlers) { // Creating stream disposed by using. using (var creatingStream = outputStream) { // Add to streams to maintain reference to test disposal. streams.Add(creatingStream); inputStream = null; outputStream = null; outputStream = await eventHandler.MediaCreatingAsync(context, creatingStream); } } } finally { // This disposes the final outputStream. outputStream?.Dispose(); } } finally { inputStream?.Dispose(); } foreach (var stream in streams) { Assert.Throws <ObjectDisposedException>(() => stream.ReadByte()); } }
public async Task <Stream> MediaCreatingAsync(MediaCreatingContext context, Stream creatingStream) { var newStream = new MemoryStream(); await creatingStream.CopyToAsync(newStream); newStream.Position = 0; return(creatingStream); }
public virtual async Task <string> CreateFileFromStreamAsync(string path, Stream inputStream, bool overwrite = false) { if (_mediaCreatingEventHandlers.Any()) { // Follows https://rules.sonarsource.com/csharp/RSPEC-3966 // Assumes that each stream should be disposed of only once by it's caller. var outputStream = inputStream; try { var context = new MediaCreatingContext { Path = path }; foreach (var mediaCreatingEventHandler in _mediaCreatingEventHandlers) { // Creating stream disposed by using. using (var creatingStream = outputStream) { // Stop disposal of inputStream, as creating stream is the object to dispose. inputStream = null; // Outputstream must be created by event handler. outputStream = null; outputStream = await mediaCreatingEventHandler.MediaCreatingAsync(context, creatingStream); } } return(await _fileStore.CreateFileFromStreamAsync(context.Path, outputStream, overwrite)); } finally { // This disposes the last outputStream. outputStream?.Dispose(); } } else { return(await _fileStore.CreateFileFromStreamAsync(path, inputStream, overwrite)); } }