【问题标题】:C# Handling event in another thread, where to start TaskC#在另一个线程中处理事件,从哪里开始任务
【发布时间】:2015-02-04 02:34:19
【问题描述】:

我需要在不阻塞调用方法的情况下引发事件,该怎么做?

1) 启动任务并从任务中引发事件? :

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

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

public void OnEventRaised(....)
{

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

}

是否会阻塞调用函数?

【问题讨论】:

    标签: c# multithreading events event-handling task


    【解决方案1】:

    您的示例都不会阻止调用者。

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

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

    您可以从这里获得更多相关信息:Raising events asynchronously

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      相关资源
      最近更新 更多