Exemple #1
0
        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);
        }