C# 异步委托与原生 DLL 集成技术详解
1. 异步委托
在编程中,有时我们希望异步调用方法,这样调用会立即返回,而方法在单独的线程上执行。运行时提供了一种标准方式,可异步调用任何方法,同时考虑到获取返回值以及提供给方法的 ref/in 参数。
当 C# 编译器遇到委托时,它生成的委托派生类包含三个关键方法:
- return-type Invoke (parameter-list);
- IAsyncResult BeginInvoke (parameter-list, AsyncCallback ac, object state);
- return-type EndInvoke (ref/out-only parameter-list, IAsyncCallback ac);
以下是对这三个方法的详细解释:
- Invoke() :同步调用方法,调用者必须等待委托执行完成(C# 中的标准委托调用会调用 Invoke())。
- BeginInvoke() :使用提供的参数列表调用委托,然后立即返回。此异步调用会在 ThreadPool 中有可用线程时立即执行。BeginInvoke() 还添加了两个额外参数:一个 AsyncCallback 对象,用于可选地指定一个委托,该委托将在 ThreadPool 线程返回之前由该线程执行;以及一个任意对象,用于保存状态。AsyncCallback 委托的签名是一个带有单个 IAsyncResult 参数的 void 方