C#处理另一个线程中的事件,从哪里开始Task

时间:2015-02-04 02:34:20

标签: c# multithreading events event-handling task

我需要在不阻塞调用方法的情况下引发事件,这样做的方法是什么?

1)启动任务并从任务中提升事件? :

//Body of listener function above
if (EventFound)
   Task.Factory.StartNew(() => 
   {
     SendEvent();
   });

2)从事件处理程序中启动任务:

public void OnEventRaised(....)
{

    Task.Factory.StartNew(() => 
    {
    //Do lengthy stuff here
    });

}

是否阻止调用函数?

2 个答案:

答案 0 :(得分:1)

您的示例都没有阻止来电者。

在第一个示例中,调用者创建一个新线程并按顺序调用所有订阅者(如果有多个)。在第二个选项中,订阅者创建一个线程,因此每个线程都拥有它自己的线程。

请记住,如果任何事件处理程序失败,这两个选项都会使应用程序崩溃。

您可以从此处获取更多相关信息:Raising events asynchronously

答案 1 :(得分:0)