Example #1
0
        public static async Task PersistentPartitionOverflow()
        {
            var options = new PersistentChannelOptions
            {
                SingleReader      = true,
                SingleWriter      = true,
                PartitionCapacity = 3
            };
            Guid g1 = Guid.NewGuid(), g2 = Guid.NewGuid(), g3 = Guid.NewGuid(), g4 = Guid.NewGuid();

            using (var channel = new SerializationChannel <Guid>(options))
            {
                await channel.Writer.WriteAsync(g1);

                await channel.Writer.WriteAsync(g2);

                await channel.Writer.WriteAsync(g3);

                await channel.Writer.WriteAsync(g4);

                Equal(0D, channel.Throughput);
                Equal(g1, await channel.Reader.ReadAsync());
                Equal(0.25D, channel.Throughput);
            }
            using (var channel = new SerializationChannel <Guid>(options))
            {
                Equal(0.25D, channel.Throughput);
                Equal(g2, await channel.Reader.ReadAsync());
                Equal(0.5D, channel.Throughput);
                Equal(g3, await channel.Reader.ReadAsync());
                Equal(0.75D, channel.Throughput);
                Equal(g4, await channel.Reader.ReadAsync());
                Equal(1D, channel.Throughput);
            }
        }
Example #2
0
 public static async Task ProduceConsumeConcurrently(long initialSize)
 {
     using var channel = new SerializationChannel <decimal>(new PersistentChannelOptions { SingleReader = true, SingleWriter = true, PartitionCapacity = 100, InitialPartitionSize = initialSize });
     var consumer = Consume(channel.Reader);
     var producer = Produce(channel.Writer);
     await Task.WhenAll(consumer, producer);
 }
Example #3
0
 public static async Task ProduceConsumeInParallel(long initialSize, bool singleReader)
 {
     using var channel = new SerializationChannel <decimal>(new PersistentChannelOptions { SingleReader = singleReader, SingleWriter = false, PartitionCapacity = 100, InitialPartitionSize = initialSize });
     var consumer  = ConsumeInRange(channel.Reader);
     var producer1 = Produce(channel.Writer, 0M, 250M);
     var producer2 = Produce(channel.Writer, 250M, 500M);
     await Task.WhenAll(consumer, producer1, producer2);
 }
Example #4
0
        public static async Task ReadWrite(bool singleReader, bool singleWriter, long initialSize)
        {
            Guid g1 = Guid.NewGuid(), g2 = Guid.NewGuid(), g3 = Guid.NewGuid();

            using var channel = new SerializationChannel <Guid>(new PersistentChannelOptions { SingleReader = singleReader, SingleWriter = singleWriter, InitialPartitionSize = initialSize });
            False(channel.Writer.TryWrite(g1));
            await channel.Writer.WriteAsync(g1);

            await channel.Writer.WriteAsync(g2);

            await channel.Writer.WriteAsync(g3);

            Equal(g1, await channel.Reader.ReadAsync());
            Equal(g2, await channel.Reader.ReadAsync());
            True(await channel.Reader.WaitToReadAsync());
            True(channel.Reader.TryRead(out var last));
            Equal(g3, last);
            Equal(1D, channel.Throughput);
        }
        public static async Task Persistence()
        {
            Guid g1 = Guid.NewGuid(), g2 = Guid.NewGuid(), g3 = Guid.NewGuid();
            var  options = new PersistentChannelOptions {
                BufferSize = 1024
            };

            using (var channel = new SerializationChannel <Guid>(options))
            {
                await channel.Writer.WriteAsync(g1);

                await channel.Writer.WriteAsync(g2);

                await channel.Writer.WriteAsync(g3);

                Equal(g1, await channel.Reader.ReadAsync());
            }
            using (var channel = new SerializationChannel <Guid>(options))
            {
                Equal(g2, await channel.Reader.ReadAsync());
                Equal(g3, await channel.Reader.ReadAsync());
            }
        }