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); } }
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); }
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); }
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()); } }