【发布时间】:2020-01-09 16:54:05
【问题描述】:
我使用BlockingCollection.TakeFromAny 在循环中等待两个BlockingCollections 中的可用项目。项目被添加到其他主题的集合中。在某个时候,我完成了向集合的添加,并且在下一次调用 TakeFromAny 时,我的代码被卡住了并且没有从中返回。
我尝试将CompleteAdding 用于这两个集合或将TakeFromAny 与CancellationToken 参数一起使用,但在这两种情况下都会出现异常:
- 与
CompleteAdding有一个ArgumentException与消息
关于添加的所有集合都标记为完整。参数名称:集合
-
CancellationToken显然有一个OperationCanceledException。
是否可以以某种方式设置集合,使我的代码无异常地从 TakeFromAny 中取出,并且返回值表明基础集合中不会有任何新项目?
TryTakeFromAny 不适合我的需要,因为它总是在集合当前为空但项目仍会稍后添加时返回。我想阻止,直到下一个项目可用或没有要添加的内容。
【问题讨论】:
标签: c# parallel-processing task-parallel-library blockingcollection