我有一个发布事件处理程序的类:
public class X
{
public event EventHandler<T> someEvent;
}
在构造函数中,我跨越多个线程。如果出现某些情况,我将在所有这些线程上执行此事件:
someEvent?.Invoke(this, new T()); //T will eventually contain some output data
假设如果多个线程同时调用该事件是否正确,只要所连接的事件处理程序知道如何处理多线程问题,那应该没有问题吗?例如,如果附加事件使用某种锁定机制或某些并发集合来处理输出数据?还是应该以其他方式处理?
作为后续问题:我应该从类中锁定对事件的访问吗?
lock(lockingObj)
{
someEvent?.Invoke(this, new T()); //T will eventually contain some output data
}
或者如果附加事件能够正确处理情况,那不是必需的吗? (我猜想,如果三个线程同时触发该事件,则所附加的代码在不同的线程上也会运行三遍)。