我正在寻找可能对此了解更多的人,我的直觉告诉我答案是“不,它不是线程安全的”,但我想确定。
为了说明我的问题,我提供了这个类的一些背景信息
public class MyContext
{
private readonly object _lock = new object();
public delegate bool MyDelegate(MyContext context);
private MyDelegate _multicastDelegate;
public MyContext()
{
_multicastDelegate = null;
}
public void AddDelegate(MyDelegate del)
{
lock(_lock)
{
_multicastDelegate += del;
}
}
public void RemoveDelegate(MyDelegate del)
{
lock(_lock)
{
_multicastDelegate += del;
}
}
public void Go()
{
_multicastDelegate.Invoke(this);
}
}
编辑:我在上面的示例中添加了锁,但这真的不是我问题的重点。
我试图更好地理解保存调用列表的数组是否是线程安全的。坦率地说,我不清楚这一切是如何组合在一起的,我们将不胜感激。
根据我发现的文档,唯一没有提供真正洞察力的报价如下:
MulticastDelegate 有一个委托的链接列表,称为调用列表,由一个或多个元素组成。调用多播委托时,调用列表中的委托按照它们出现的顺序被同步调用。如果在执行列表期间发生错误,则会引发异常。
https://msdn.microsoft.com/en-us/library/system.multicastdelegate.aspx
提前致谢。