使用同一事件处理程序的多个线程

时间:2019-03-10 22:20:30

标签: c# multithreading eventhandler

我有一个发布事件处理程序的类:

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
}

或者如果附加事件能够正确处理情况,那不是必需的吗? (我猜想,如果三个线程同时触发该事件,则所附加的代码在不同的线程上也会运行三遍)。

0 个答案:

没有答案