Skip to content

Instantly share code, notes, and snippets.

@to11mtm
Created December 30, 2022 00:05
Show Gist options
  • Select an option

  • Save to11mtm/3c6aa8bbb9a77e51ec0f8df3206fce48 to your computer and use it in GitHub Desktop.

Select an option

Save to11mtm/3c6aa8bbb9a77e51ec0f8df3206fce48 to your computer and use it in GitHub Desktop.
<Query Kind="Program">
<Namespace>System.Threading.Channels</Namespace>
<Namespace>System.Threading.Tasks</Namespace>
</Query>
async Task Main()
{
var channel = Channel.CreateBounded<string>(100);
Func<CancellationTokenSource> newCts = ()=> new CancellationTokenSource();
var cts1 = newCts();
var cts2 = newCts();
var cts3 = newCts();
var cts4 = newCts();
try
{
var r = channel.Reader.WaitToReadAsync(cts1.Token);
cts1.Cancel();
await r;
}
catch
{
}
try
{
var r = channel.Reader.WaitToReadAsync(cts2.Token);
cts2.Cancel();
await r;
}
catch
{
}
try
{
var r = channel.Reader.WaitToReadAsync(cts3.Token);
cts3.Cancel();
await r;
}
catch
{
}
try
{
var r = channel.Reader.WaitToReadAsync(cts4.Token);
cts4.Cancel();
await r;
}
catch
{
}
Debugger.Break(); //Check the channel's private _waitingReadersTail here
channel.Writer.TryWrite("willClear");
Debugger.Break(); //Now it's cleared out.
await channel.Reader.WaitToReadAsync();
Debugger.Break();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment