- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
解决方案 1 和 2 之间的区别是什么,_taskQ 是 BlockingCollection,我正在尝试实现生产者-消费者场景。 BlockingCollection 使用默认的 ConcurrentQueue 进行内部存储。
//Solution 1
foreach (Action action in _taskQ.GetConsumingEnumerable())
{
action(); // Perform task.
Thread.Sleep(1000);
}
当没有项目时 TryTake 阻塞
//Solution 2
Action t;
while(_taskQ.TryTake(out t))
{
t();
Thread.Sleep(1000);
}
最佳答案
bool TryTake(out T)
如果没有项目则立即返回 false。bool TryTake(out T, TimeSpan)
如果在超时期限内没有项目,则返回 false。GetConsumingEnumerable()
返回的枚举在没有项目时会阻塞,直到生产者调用 CompleteAdding()
。
在解决方案 1 中,您等待下一个操作并执行它;合适的图案!但是 Thread.Sleep()
并不是真正必要的,因为如果无论如何都没有项目,迭代将阻塞。
在解决方案 2 中,您在有任何操作时采取并执行操作,然后在消费者领先于生产者时退出循环。这可能不是您想要的。
关于c# - TryTake 与 GetConsumingEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35206087/
解决方案 1 和 2 之间的区别是什么,_taskQ 是 BlockingCollection,我正在尝试实现生产者-消费者场景。 BlockingCollection 使用默认的 Concurren
我正在考虑使用 ConcurrentBag在我正在编写的程序中,但是我似乎找不到关于 TryTake 的足够文档. 我知道该方法可能会失败,但我找不到关于可能发生这种失败的情况的解释,以及失败后集合将
假设 BlockingCollection 在下面使用 ConcurrentQueue,TryTake(T, Int32) method 什么时候可以如果您使用 Timeout.Infinite,则返
如何在 BlockingCollection 上使用 TryTake 方法以毫秒为单位传递超时时间? 这是签名: BlockingCollection.TryTake(item: byref, mil
我一直在努力思考 Blocking Collection我遇到了 Take() 和 TryTake() 还有 Add() 和 TryAdd() 我知道如果没有要拿的元素,Take() 将等到元素被添加
当我调用 IProducerConsumerCollection.TryAdd()或 IProducerConsumerCollection.TryTake(out )这些会不会因为另一个线程正在使用
我是一名优秀的程序员,十分优秀!