为什么在BCL中没有AutoResetEventSlim
类?
可以使用ManualResetEventSlim
模拟吗?
最佳答案
ManualResetEvent
和ManualResetEventSlim
都经过设计,以便在调用后仍保持信号状态。通常,这是与AutoResetEvent
截然不同的方案。AutoResetEvent
使用后立即返回无信号状态,通常用于不同的场景。从AutoResetEvents文档中:
但是,对于以下情况,通常使用ManualResetEvent
(和Slim
):
由于AutoResetEvent
最常用于存在多个共享资源的线程的情况下,因此等待时间通常不会非常短。但是,ManualResetEventSlim
实际上仅在事先知道等待时间非常短的情况下才需要使用。如果等待时间不会很短,那么应该改用ManualResetEvent
。有关详细信息,请参见difference between MRE and MRES上的文档。
当您的等待时间较长时(这是AutoResetEvent
的正常情况),“slim”版本实际上会更糟,因为它会恢复为使用等待句柄。