【发布时间】:2010-08-20 13:21:55
【问题描述】:
假设我有一个类,其中包含一个简单的方法。假设有一个委托与此方法具有相同的签名。
我想运行多个长时间运行的进程,每个进程都从此类启动。每个进程都包含一个事件,该事件由与上述委托相同类型的多播委托组成。一旦每个“worker”类被实例化,上面提到的“控制”类就会订阅worker的事件,使用上面提到的同样简单的方法。一旦每个工人的工作完成,它的事件就会被调用。
在单线程环境中,这种架构相当简单。但是,我计划在单独的线程上运行每个工作进程。因此,多个工人将(几乎)同时调用他们的事件,每个事件都由控制类的简单方法订阅。
鉴于委托是不可变的,是否可以保证每个线程都可以独占访问简单方法?我不关心简单方法中的锁定代码,我关心线程#1 将使用一组参数调用该方法,而线程#2 几乎同时调用相同的方法。
在Thread#1进入lock语句之前,Thread#2(与Thread#2几乎同时进入方法)能否覆盖Thread#1指定的参数,导致Thread#2的参数被有效处理两次?
我意识到这有点拗口,我很乐意提供更多信息。
【问题讨论】:
标签: c# multithreading events concurrency delegates