gpt4 book ai didi

c# - 与多个事件发布者和多线程关联的单个 .NET 事件订阅者

转载 作者:太空宇宙 更新时间:2023-11-03 22:19:54 34 4
gpt4 key购买 nike

假设我有一个类,包含一个简单的方法。假设有一个委托(delegate)与此方法具有相同的签名。

我想运行多个长时间运行的进程,每个进程都从此类启动。每个进程包含一个事件,它由与上述委托(delegate)相同类型的多播委托(delegate)组成。一旦实例化了每个“ worker ”类,上面提到的“控制”类就会使用上述相同的简单方法订阅 worker 的事件。一旦每个 worker 的工作完成,它的事件就会被调用。

在单线程环境中,这种架构相当简单。但是,我计划在单独的线程上运行每个工作进程。因此,多个 worker 将(几乎)同时调用它们的事件,每个事件都由控制类的简单方法订阅。

如果委托(delegate)是不可变的,是否可以保证每个线程都可以独占访问简单方法?我不关心将代码锁定在简单方法中,我担心线程 #1 将使用一组参数调用该方法,而线程 #2 几乎同时调用相同的方法。

在Thread#1进入lock语句之前,Thread#2(几乎与Thread#2同时进入方法)是否可以覆盖Thread#1指定的参数,导致Thread#2的参数被有效处理两次?

我知道这有点啰嗦,我很乐意提供更多信息。

最佳答案

线程不能覆盖方法的参数 - 这些参数存储在堆栈中并且始终是线程安全的。在您的情况下,唯一可能不是线程安全的是您类(class)的状态。

关于c# - 与多个事件发布者和多线程关联的单个 .NET 事件订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3531181/

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