using System.Threading.Channels;
using System.Threading.Tasks;
public static void Main()
Console.WriteLine("Case 1:");
var someClass = new SomeClass();
_ = someClass.ConsumeChannel();
Console.WriteLine("Case 2:");
var someClass1 = new SomeClass1();
_ = someClass1.ConsumeChannel();
Console.WriteLine("Case 3:");
var someClass2 = new SomeClass2();
_ = someClass2.ConsumeChannel();
Console.WriteLine("Case 4:");
var someClass3 = new SomeClass3();
_ = someClass3.ConsumeChannel();
_ = someClass3.WaitAndThenCancelToken();
Console.WriteLine("Case 5:");
var someClass4 = new SomeClass4();
_ = someClass4.ConsumeChannel();
_ = someClass4.WaitAndThenCancelToken();
Console.WriteLine("Case 6:");
var someClass5 = new SomeClass5();
_ = someClass5.ConsumeChannel();
_ = someClass5.WaitAndThenCancelToken();
Console.WriteLine("Press any key to exit: ");
Channel<int> SomeChannel { get; set; }
SomeChannel = Channel.CreateUnbounded<int>();
SomeChannel.Writer.TryWrite(1);
SomeChannel.Writer.TryWrite(2);
SomeChannel.Writer.TryWrite(3);
public async Task ConsumeChannel()
await foreach(var someInt in SomeChannel.Reader.ReadAllAsync())
Console.WriteLine(someInt);
Console.WriteLine("Channel empty, so it went here.");
Channel<int> SomeChannel { get; set; }
SomeChannel = Channel.CreateUnbounded<int>();
SomeChannel.Writer.TryWrite(1);
SomeChannel.Writer.TryWrite(2);
SomeChannel.Writer.TryWrite(3);
public async Task ConsumeChannel()
await foreach(var someInt in SomeChannel.Reader.ReadAllAsync())
Console.WriteLine(someInt);
SomeChannel.Writer.TryComplete();
Console.WriteLine("Channel empty, so it went here.");
Channel<int> SomeChannel { get; set; }
SomeChannel = Channel.CreateUnbounded<int>();
SomeChannel.Writer.TryWrite(1);
SomeChannel.Writer.TryWrite(2);
SomeChannel.Writer.TryWrite(3);
public async Task ConsumeChannel()
await foreach(var someInt in SomeChannel.Reader.ReadAllAsync())
Console.WriteLine(someInt);
SomeChannel.Writer.TryComplete();
Console.WriteLine("Break in the await foreach, so it went here.");
Channel<int> SomeChannel { get; set; }
CancellationTokenSource cts { get; set; }
cts = new CancellationTokenSource();
SomeChannel = Channel.CreateUnbounded<int>();
SomeChannel.Writer.TryWrite(1);
SomeChannel.Writer.TryWrite(2);
SomeChannel.Writer.TryWrite(3);
public async Task ConsumeChannel()
await foreach(var someInt in SomeChannel.Reader.ReadAllAsync())
Console.WriteLine(someInt);
cts.Token.ThrowIfCancellationRequested();
Console.WriteLine("Case 4: Token cancelled and exception called and not caught, so it went here.");
public async Task WaitAndThenCancelToken()
Console.WriteLine("Case 4: Cancelling token now");
Channel<int> SomeChannel { get; set; }
CancellationTokenSource cts { get; set; }
cts = new CancellationTokenSource();
SomeChannel = Channel.CreateUnbounded<int>();
SomeChannel.Writer.TryWrite(1);
SomeChannel.Writer.TryWrite(2);
SomeChannel.Writer.TryWrite(3);
SomeChannel.Writer.TryWrite(4);
SomeChannel.Writer.TryWrite(5);
SomeChannel.Writer.TryWrite(6);
SomeChannel.Writer.TryWrite(7);
SomeChannel.Writer.TryWrite(8);
SomeChannel.Writer.TryWrite(9);
SomeChannel.Writer.TryWrite(10);
SomeChannel.Writer.TryWrite(11);
SomeChannel.Writer.TryWrite(12);
public async Task ConsumeChannel()
await foreach(var someInt in SomeChannel.Reader.ReadAllAsync())
Console.WriteLine(someInt);
cts.Token.ThrowIfCancellationRequested();
catch (OperationCanceledException)
Console.WriteLine("Case 5: Token cancelled and exception called and caught, so it went here.");
public async Task WaitAndThenCancelToken()
Console.WriteLine("Case 5: Cancelling token now");
Channel<int> SomeChannel { get; set; }
CancellationTokenSource cts { get; set; }
cts = new CancellationTokenSource();
SomeChannel = Channel.CreateUnbounded<int>();
SomeChannel.Writer.TryWrite(1);
SomeChannel.Writer.TryWrite(2);
SomeChannel.Writer.TryWrite(3);
public async Task ConsumeChannel()
await foreach(var someInt in SomeChannel.Reader.ReadAllAsync().WithCancellation(cts.Token))
Console.WriteLine(someInt);
cts.Token.ThrowIfCancellationRequested();
Console.WriteLine("Case 6: Token cancelled in the chained WithCancallation method, so it went here.");
catch (OperationCanceledException)
Console.WriteLine("Case 6: Token cancelled and exception called and caught, so it went here.");
public async Task WaitAndThenCancelToken()
Console.WriteLine("Case 6: Cancelling token now");