多线程和委托调用

本文关键字:调用 多线程 | 更新日期: 2023-09-27 18:07:37

假设我有一个方法在多个线程和一个委托中运行。

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

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

多线程和委托调用

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

每个单独的线程将引发一个单独的事件,正如你所说的,如果事件是这样设计的,那么事件处理程序有责任处理在多个线程中被单独事件调用的可能性。

从引发事件的类的角度来看,线程安全性并不能很好地描述您所要求的内容,因为您混淆了术语。线程安全是关于一个类是否可以在多线程的情况下安全地被调用来完成它的工作,这些线程不通过类的状态进行交互。