BlockingCollectionTryTake()什么时候可以返回false?下面假设BlockingCollection使用的是ConcurrentQueue,如果使用Timeout.Infinite,那么TryTake(T,Int32)方法什么时候返回false呢?下面是一个简单的示例,显示何时可以返回false://默认情况下,BlockingCollection将使用ConcurrentQueueBlockingCollectioncoll=newBlockingCollection();科尔。添加(1);科尔。添加(2);coll.CompleteAdding();整数项;如果(coll.TryTake(outitem,-1)){Console.WriteLine(item);}if(coll.TryTake(outitem,-1)){Console.WriteLine(item);}if(coll.TryTake(outitem,-1)){//这不会被击中}else{Console.WriteLine("TryTake返回false!");这允许您禁止将新项目添加到队列并完成处理剩余元素这将打印false:varcoll=newBlockingCollection();coll.CompleteAdding();//关闭业务intv;boolresult=coll.TryTake(outv,Timeout.Infinite);控制台.WriteLine(结果);所以基本上BlockingCollection支持2个独立的概念:Empty和Closed。虽然TryTake()可以在Empty队列上永远等待,但当队列为Empty和Closed时它将返回false。以上就是C#学习教程:BlockingCollectionTryTake()什么时候可以返回false?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
