ConcurrentQueue<int> queue = new ConcurrentQueue<int>(Enumerable.Range(0,10000));
CountdownEvent cde = new CountdownEvent(10000);
//This is the logic for all queue consumers
Action consumer = () =>
{
int local;
while (queue.TryDequeue(out local))
{
Console.WriteLine(Task.CurrentId.Value);
cde.Signal(); // 1万个Signal;
}
};
//Now empty the queue with a couple of asynchronous tasks
Task t1 = Task.Factory.StartNew(consumer);
Task t2 = Task.Factory.StartNew(consumer);
//And wait for queue to empty by waiting on cde
cde.Wait(); //will return when cde count reaches 0
Console.WriteLine("Done emptying queue. InitialCount={0},CurrentCount={1},IsSet={2}", cde.InitialCount, cde.CurrentCount, cde.IsSet);
Task.WaitAll(t1, t2);CountdownEvent的使用 Task 的异步编程
最新推荐文章于 2023-12-13 14:11:13 发布
本文展示了一个使用C#实现的并发队列(ConcurrentQueue)与计数器事件(CountdownEvent)的示例。通过创建一个包含10000个元素的并发队列,并使用两个异步任务消费队列中的元素,同时利用计数器事件来同步这两个任务的完成状态。
1816

被折叠的 条评论
为什么被折叠?



