最近我在升级一个库以使用.NET 6和.NET 7,发现有一些代码将公寓状态设置为STA,但我发现设置公寓状态只适用于Windows。为了让编译器满意,我们将代码更改为以下内容。
但这让我想到,如果这段代码最终在Linux或MacOS平台上运行,一切会没问题吗?除了如果你有一个应该以单线程运行的线程,你应该使用STA之外,我对Windows中的单线程公寓和多线程公寓的作用几乎一无所知。我对这些概念如何转化到Linux和MacOS也几乎一无所知,是否重要也不得而知。这些操作系统是否总是表现得像STA,或者总是表现得像MTA,或者根本不重要,因为处理方式如此不同,进行比较甚至没有意义,但它仍然能够工作。
我们目前没有任何立即在Linux或MacOS上运行此库的用例,但也许将来会有,但因为这样,这个库可能会在很长一段时间内没有经过测试。
#if NET472
_thread.SetApartmentState(ApartmentState.STA);
#else
if (OperatingSystem.IsWindows())
_thread.SetApartmentState(ApartmentState.STA);
#endif
但这让我想到,如果这段代码最终在Linux或MacOS平台上运行,一切会没问题吗?除了如果你有一个应该以单线程运行的线程,你应该使用STA之外,我对Windows中的单线程公寓和多线程公寓的作用几乎一无所知。我对这些概念如何转化到Linux和MacOS也几乎一无所知,是否重要也不得而知。这些操作系统是否总是表现得像STA,或者总是表现得像MTA,或者根本不重要,因为处理方式如此不同,进行比较甚至没有意义,但它仍然能够工作。
我们目前没有任何立即在Linux或MacOS上运行此库的用例,但也许将来会有,但因为这样,这个库可能会在很长一段时间内没有经过测试。