在c#中使用delegate/BeginInvoke将调用方与被调用方解耦

本文关键字:调用 解耦 方解耦 delegate BeginInvoke | 更新日期: 2023-09-27 18:12:25

在c#中,我有一个类的层次结构,这些类执行的操作可能需要很长时间。出于这个原因,我实现了一种解耦/回调机制,这样调用者就不会被阻塞,而是通过回调接口通知操作完成。它看起来像这样:

protected delegate void ActionDelegate();
public void doAction()
{
  Task.Factory.StartNew(() => DoActionASync());
}
private void DoActionASync()
{
  DoActionImpl(); 
  Caller->ActionDone(); // Caller is registered separately, and implements an interface (ICallback) that includes this function
}
protected abstract void DoActionImpl(); // Derived classes implement this

这是相当多的重复代码,每个方法都有细微的差异(在签名上)。我的问题是,这是否是正确的方法,或者。net/c#是否提供了任何结构,使这更容易/更少的冗长?

在c#中使用delegate/BeginInvoke将调用方与被调用方解耦

MSDN上有关于异步编程模式的很好的文档。如果你正在使用。net 4,你应该看看任务并行库(TPL)。

这里介绍了使用委托的异步编程(还有一个额外的例子)。如果遵循MSDN的做法和建议,你可能会做得更糟。