我想使用 AppDomain.CurrentDomain.GetAssemblies()
枚举 Asp.NET 应用程序中所有加载的程序集。但是,在检查 AppDomain 的文档时,我发现以下语句:
由于 GetAssemblies()
是一个实例方法,因此我采用它是因为我必须在该调用周围采取某种锁定,如果不是为了其他任何事情,以防止其他人在我枚举当前程序集时将新程序集加载到域中.我希望 AppDomain 提供某种 SyncRoot 属性,但它没有,而且我还没有在网上找到任何有关如何操作的信息。
我应该如何同步这个电话?
编辑
最佳答案
SyncRoot 属性通常是一个非常糟糕的主意。 2 个独立开发的库可能会在不知不觉中决定锁定共享的 SyncRoot 属性并迅速将死锁引入应用程序的原因之一。锁定是一种无法在两个独立组件之间轻松可靠地共享的操作。这里最好的策略是开发你自己的锁,你的组件使用它来同步访问。
在这种情况下,虽然从多个线程调用 GetAssemblies 是安全的,因此不需要锁定。您看到的警告是添加到 BCL 中每个类的一般声明,除非作者专门为线程安全设计了类型并删除了消息。
关于.net - 可以锁定 (AppDomain.CurrentDomain)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2327710/