为什么AutoResetEvent和ManualResetEvent不支持构造函数中的名称?

Ika*_*aso 2 multithreading synchronization .net-2.0

在.NET Framework 2.0上,AutoResetEvent和ManualResetEvent继承自EventWaitHandle.EventWaitHandle类有4个不同的构造函数.3个构造函数支持为事件命名.另一方面,ManualResetEvent和AutoResetEvent都不支持命名并提供接收initialState的单个构造函数.我可以简单地从EventWaitHandle继承并编写我自己的那些支持所有构造函数重载的类的实现,但我不喜欢重新发明轮子,如果我不需要.我的问题是:

  • 命名事件有特殊问题吗?
  • 你知道为什么微软不支持它吗?
  • 您是否有一个提案比继承自EventWaitHandle类并调用适当的构造函数更好,如下例所示?
    public class MyAutoResetEvent: EventWaitHandle  
    {  
        public MyAutoResetEvent(bool initialState)  
            : base(initialState, EventResetMode.AutoReset)  
        {  
        }  
        public MyAutoResetEvent(bool initialState, string name)  
            : base(initialState, EventResetMode.AutoReset, name)  
        {  
        }  
        public MyAutoResetEvent(bool initialState, string name, out bool createdNew)  
            : base(initialState, EventResetMode.AutoReset, name, out createdNew)  
        {  
        }  
        public MyAutoResetEvent(bool initialState, string name, out bool createdNew, EventWaitHandleSecurity eventSecurity)  
            : base(initialState, EventResetMode.AutoReset, string.Empty, out createdNew, eventSecurity)  
        {  
        }  
    }  

Kir*_*ril 5

你可以像这样制作一个命名的手动重置事件:

// Open the event by name.
EventWaitHandle namedMRSE = 
    new EventWaitHandle(false, EventResetMode.ManualReset, @"TheName");
Run Code Online (Sandbox Code Playgroud)

以下是上述代码的参考.我不知道设计背后的特殊原因,但有一些关于msdn的注释表明存在基于应用程序域和过程的区别:

事件等待句柄在许多与Monitor类相同的同步方案中很有用.事件等待句柄通常比System.Threading.Monitor.Wait和System.Threading.Monitor.Pulse(System.Object)方法更容易使用,它们提供了对信令的更多控制.命名事件等待句柄还可用于跨应用程序域和进程同步活动,而监视器是应用程序域的本地.