如何等待一个值添加到ConcurrentDictionary或发生超时?

xan*_*der 5 c# multithreading data-structures

我有一个任务应该等到一个值添加到ConcurrentDictionary.如果添加了值,它应该停止等待并继续其工作.如果发生超时(例如5秒),它应该停止等待.

该值应该由另一个线程/任务添加到ConcurrentDictionary,但是,由于代码的性质,我不希望线程彼此通信.

我应该如何实现这个(在C#中)?

顺便说一句,我正在使用任务,而不是大部分的线程,因此我不确定当前线程上的Thread.Sleep或其他方法是否是一个好的决定,因为它可能会睡眠使用相同线程的其他任务并导致随机问题.

Jon*_*eet 1

我不相信ConcurrentDictionary为这样的事情提供任何钩子。

您可以通过包装或派生ConcurrentDictionary来提供此功能,但我会对此感到紧张。

低技术含量的替代方法是简单地轮询 - 循环、检查然后休眠,直到找到正确的值或超时。从效率的角度来看,这还远远不够,但如果它不会给您带来任何其他问题,它可能是最简单的方法。