gpt4 book ai didi

c# - 多线程和委托(delegate)调用

转载 作者:行者123 更新时间:2023-11-30 23:20:52 27 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

关于c# - 多线程和委托(delegate)调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39581831/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com