多线程和委托调用

时间:2016-09-19 20:46:05

标签: c# multithreading

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);
}

所以问题更像是:"事件"从调用类的角度看这个线程安全(我知道我必须保证插入方法的线程安全)

1 个答案:

答案 0 :(得分:2)

引发事件的类可以在多个线程上同时执行此操作,如果这是您想要的行为。一个"事件"就像按顺序调用的方法列表一样。

每个单独的线程都会引发一个单独的事件,正如你所说,事件处理程序有责任处理单独事件在多个线程上调用的可能性,如果这是事件的设计方式。

从提升事件的类别来看,线程安全并不能很好地描述您所要求的内容,因为您正在混合术语。线程安全是关于是否可以调用类在多线程情况下安全地完成其工作,这些线程不会通过类状态进行交互。