CreateChildContainer() 是线程安全的

本文关键字:安全 线程 CreateChildContainer | 更新日期: 2023-09-27 18:37:25

早在 2009 年,可能是 Unity 2.0 之前,我看到一个讨论线程,表明 CreateChildContainer() 不是线程安全的:

此外,如果使用 CreateChildContainer() 方法创建子容器,它们将在创建期间将自己添加到其父容器的实时容器中,并在释放时删除。因此,从单独的线程释放子容器可能会导致错误,即使每个子容器一次只能由一个线程访问。

Unity 2.0确实(仍然)如此吗? Unity 3.0 或更高版本呢?

如果使用 WCF 实现 Unity,则这一点特别有趣,如本文所述。 这个想法是使用子容器来轻松释放HierarchylifetimeManager实例。 虽然我现在想知道是否应该在没有子容器的情况下使用 PerRequestlifetime Manager。

CreateChildContainer() 是线程安全的

基于最新的源代码(Unity 3.5)。它应该是线程安全的。它将自己添加到父级的生命周期容器中,parent.lifetimeContainer.Add(this);实现Add使用lock()围绕其私人子列表的修改。