using System.Threading.Tasks;
using System.Threading.Channels;
using System.Collections.Concurrent;
var bc = new BlockingCollection<WorkItem>();
static Task ScheduleBc(BlockingCollection<WorkItem> bc, int value)
var wi = new WorkItem{ value = value, tcs = new TaskCompletionSource() };
foreach (var wi in bc.GetConsumingEnumerable())
Console.WriteLine(wi.value);
public TaskCompletionSource tcs;