public async Task AnonymousPipeViaFileStream_AllDataCopied(int writeSize, int numWrites) { long totalLength = writeSize * numWrites; var expectedData = new byte[totalLength]; new Random(42).NextBytes(expectedData); var results = new MemoryStream(); using (var server = new AnonymousPipeServerStream(PipeDirection.Out)) { Task serverTask = Task.Run(async () => { for (int i = 0; i < numWrites; i++) { await server.WriteAsync(expectedData, i * writeSize, writeSize); } }); using (var client = new FileStream(new SafeFileHandle(server.ClientSafePipeHandle.DangerousGetHandle(), false), FileAccess.Read, bufferSize: 3)) { Task copyTask = client.CopyToAsync(results, writeSize); await await Task.WhenAny(serverTask, copyTask); server.Dispose(); await copyTask; } } byte[] actualData = results.ToArray(); Assert.Equal(expectedData.Length, actualData.Length); Assert.Equal<byte>(expectedData, actualData); }