private static async Task <Stream> GetReadStreamAsync(int messageCount) { var memoryStream = new MemoryStream(); var messageStream = new MessageStream <IStagedBodyMessage>( new StagedBodyMessageDeserializer( new MessageProvider <int, IStagedBodyMessage>(), new TestMessageDeserializer() ), new StagedBodyMessageSerializer( new TestMessageSerializer(), new TestMessage2Serializer() ), new StreamDuplexMessageStream(new MemoryStream(), memoryStream) ); var stopwatch = new Stopwatch(); await messageStream.OpenAsync().ConfigureAwait(false); stopwatch.Start(); var random = new Random(); for (int i = 0; i < messageCount; i++) { if (i % 2 == 0) { await messageStream.WriteAsync(new TestMessage { Value = (short)random.Next(short.MaxValue) }).ConfigureAwait(false); } else { await messageStream.WriteAsync(new TestMessage2 { Value = (uint)random.Next(int.MaxValue) }).ConfigureAwait(false); } if (i % 1000 == 0) { await messageStream.FlushAsync().ConfigureAwait(false); } } stopwatch.Stop(); Console.WriteLine($"Took {stopwatch.ElapsedMilliseconds}ms to write {messageCount} messages. {messageCount / stopwatch.Elapsed.TotalSeconds} messages/s"); await messageStream.CloseAsync().ConfigureAwait(false); memoryStream.Position = 0; return(memoryStream); }