当您调用事件时事件是阻塞还是非阻塞?

时间:2011-04-02 14:02:31

标签: c# multithreading events blocking

假设我有一个事件Tick,我称之为:

public class Test
{
    public event Action Tick;

    public void Test()
    {
         Tick();
         Console.WriteLine("Tick Finished");
    }
}

如果我有大量订阅Tick的事件,那么运行Test()的此线程的操作是否会被阻塞,直到它们全部被调用或者是否异步执行此操作?

2 个答案:

答案 0 :(得分:4)

所有活动都在阻止。线程执行将被阻止,直到所有注册到此事件的事件处理程序都已执行。

答案 1 :(得分:1)

当Tick()运行时,它将阻止您进一步完成代码。

要向自己证明这一点,请编写一个控制台应用程序来做这件事,该活动有很多订阅者,并观察会发生什么。