我正在使用 C# 3.0 中的 Generic.Queue 和 Monitor.Enter、Wait、Exit 来在消耗队列之前等待(等待元素入队)。现在我要转移到 C# 4。请问有人能建议我哪种方法更快更好,尤其是为了避免锁定...是 BlockingCollection 还是 ConcurrentQueue 或其他任何东西...注意:我不想限制我的生产者。谢谢提前。
BlockingCollection
和 ConcurrentQueue
就是为了这个目的而存在的。我怀疑你找不到比它们更好、更简单易用的东西了。并行扩展团队非常专业 :)
只是需要快速检查一下版本 - 您确定使用的是.NET 4,而不仅仅是C# 4吗?(例如,您可能在使用Visual Studio 2010和C# 4,但仍面向.NET 3.5,在这种情况下,您无法使用Parallel Extensions。)
您可能还想开始研究基于任务的异步模式,TPL数据流以及C# 5的异步/等待功能… 当然,您现在还不能使用它们,但了解即将出现的新功能也无妨。
ConcurrentQueue
,然后将其包装在BlockingCollection
中,以协调Add/Take
方法。(然后让它完全管理队列 - 之后不应直接自行操作ConcurrentQueue
。) - Jon Skeet