为什么在BCL中没有AutoResetEventSlim类?

可以使用ManualResetEventSlim模拟吗?

最佳答案

ManualResetEventManualResetEventSlim都经过设计,以便在调用后仍保持信号状态。通常,这是与AutoResetEvent截然不同的方案。
AutoResetEvent使用后立即返回无信号状态,通常用于不同的场景。从AutoResetEvents文档中:



但是,对于以下情况,通常使用ManualResetEvent(和Slim):



由于AutoResetEvent最常用于存在多个共享资源的线程的情况下,因此等待时间通常不会非常短。但是,ManualResetEventSlim实际上仅在事先知道等待时间非常短的情况下才需要使用。如果等待时间不会很短,那么应该改用ManualResetEvent。有关详细信息,请参见difference between MRE and MRES上的文档。

当您的等待时间较长时(这是AutoResetEvent的正常情况),“slim”版本实际上会更糟,因为它会恢复为使用等待句柄。

10-08 08:48