.NET Core 2.1 EventWaitHandle是否不受支持?

时间:2018-11-28 19:29:19

标签: c# .net-core

我正在将C#.NET Framework项目转换为.NET Core。它可以编译,没有错误或警告,并且可以在Windows上正常运行,但是当我在CentOS 7上尝试使用它时,当我尝试创建EventWaitHandle的实例时得到了 System.PlatformNotSupportedException 。这是代码:

this.eventHandle = new EventWaitHandle(initialState, resetMode, name);

显然,该类具有.NET Core 2.1支持,因为此处提供了MS文档:

https://docs.microsoft.com/en-us/dotnet/api/system.threading.eventwaithandle.-ctor?view=netcore-2.1

这是否像错误所描述的那样简单,并且跨多个平台不支持此类?如果是这样,为什么它包含在.NET Core中?这里还会有其他活动吗?

如果根本不支持它,是否有人可以建议在.NET Core 2.1中完全支持该类?

谢谢。

1 个答案:

答案 0 :(得分:3)

.Net Core具有一些特定于平台的api。这就是其中之一。它是无法处理的命名句柄,请参见source

    public EventWaitHandle(bool initialState, EventResetMode mode, string name)
    {
        if(name != null)
        {
#if PLATFORM_UNIX
            throw new PlatformNotSupportedException(Environment.GetResourceString("PlatformNotSupported_NamedSynchronizationPrimitives"));
#else
            if (System.IO.Path.MaxPath < name.Length)
            {
                throw new ArgumentException(Environment.GetResourceString("Argument_WaitHandleNameTooLong", name));
            }
#endif
        }

        ...

一些更有趣的读物here

  

我不确定您应该使用哪种.NET技术。如果不需要跨进程同步,则无需为EventWaitHandle指定名称,也可以使用EventWaitHandle的其他子类,例如ManualResetEvent或AutoResetEvent。