我正在尝试确定是否可以使用ManualResetEvent
此处来确保在并发环境中,myMethod()
永远不会同时调用内部操作。
static volatile bool _syncInitialized = false;
static ManualResetEvent _syncEvent = new ManualResetEvent(false);
static object _syncLock = new object();
void myMethod()
{
lock (_syncLock)
{
if (!_syncInitialized) // sync hasn't started, so
{
_syncInitialized = true;
_syncEvent.Set(); // signal for the first time only
}
}
if (_syncEvent.WaitOne()) // wait for signal
{
_syncEvent.Close();
_syncEvent = new ManualResetEvent(false); // reset to false
// actions that should be forced to run sequentially
}
}
编辑- 注意我使用 ManualResetEvent 而不是 lock() 因为我希望能够添加超时,可能。