如何使用Tasks来简化Delegate.BeginInvoke / Delegate.EndInvoke?

时间:2011-09-29 02:56:53

标签: c# events asynchronous delegates task

尝试围绕Tasks类,更具体地说,Task.Factory.FromAsync方法。

目前在我的代码中我正在做这样的事情:

var handler = MyEvent;

if (handler != null)
{
    handler.Invoke(this, e);
}

不幸的是,这是同步的,我正在寻找异步版本。我可以使用BeginInvoke和EndInvoke,但考虑到我不需要回调,这看起来有点浪费。我相信我听说过某个地方可以使用Task.Factory方法中的一个来简化这个调用,这样就不需要虚拟回调。谁能开导我?

1 个答案:

答案 0 :(得分:0)

异步调用事件处理程序有点不寻常;如果处理程序想要异步处理事件,它应该自己启动一个任务。

您可以使用Task.Factory.StartNew Method *:

启动任务
void MyClass_MyEvent(object sender, EventArgs e)
{
    Task.Factory.StartNew(() =>
    {
        // do work
    });
}

(*或Async CTP或.NET 4.5中的Task.Run Method