Supose我有一个在多个线程和委托中运行的方法。
public delegate void Del(string threadId, string value, ref string result);
public event Del Analyze= null; // The external world can plug in a method
// this method runs simultanioulsy in several threads
private void threaded()
{
string s= null;
// yadayada s gets a value and I want a result back
// from the external world
string result = null;
is (Analyze != null)
Analyze("some thread id", s, ref result);
}
我知道用作事件的方法必须同步以便线程安全等,但是如果
会发生什么Analyze("some thread id", s, ref result);
同时被调用?这可以吗?或者我需要同步Analyze,如:
lock(someobj)
{
Analyze("some thread id", s, ref result);
}
所以问题更像是:"事件"从调用类的角度看这个线程安全(我知道我必须保证插入方法的线程安全)
答案 0 :(得分:2)
引发事件的类可以在多个线程上同时执行此操作,如果这是您想要的行为。一个"事件"就像按顺序调用的方法列表一样。
每个单独的线程都会引发一个单独的事件,正如你所说,事件处理程序有责任处理单独事件在多个线程上调用的可能性,如果这是事件的设计方式。
从提升事件的类别来看,线程安全并不能很好地描述您所要求的内容,因为您正在混合术语。线程安全是关于是否可以调用类在多线程情况下安全地完成其工作,这些线程不会通过类状态进行交互。