利用AsyncCallback将同步方法转为异步执行
2012-02-13 14:23
169 查看
C#中,如果希望一个方法能够异步执行,可以创建线程,也可以使用AsyncCallback,后者更简单。
假设有一个方法对给定的两个整数进行复杂运算,会耗费较长时间:
- public void Compute(int x, int y)
- {
- //计算过程省略
- return ......;
- }
先为其定义一个委托:
- public delegate void AsyncComputeCaller(int x, int y);
需要异步调用的时候,执行如下代码:
- AsyncComputeCaller caller = new AsyncComputeCaller(this.Compute);
- AsyncCallback callback = new AsyncCallback(ComputeCallback);
- caller.BeginInvoke(X, Y, callback, caller);
BeginInvoke方法不会阻塞,实现了异步调用。其中ComputeCallback为回调方法,内容如下:
- private void ComputeCallback(IAsyncResult result)
- {
- AsyncComputeCaller caller = (AsyncComputeCaller)result.AsyncState;
- caller.EndInvoke(result);
- }
在此方法中可以做一些后续的处理,由于它可以在UI线程中,因此直接更新界面控件不会有问题。
阅读更多
相关文章推荐
- 利用AsyncCallback将同步方法转为异步执行
- 利用BenchmarkDotNet 测试 .Net Core API 同步和异步方法性能
- 使用Promise和async-await实现的一个异步遍历+同步执行任务的实例
- Node.js的那些坑(四)——如何让异步并发方法同步顺序执行
- 判断用户的请求类型 get or post 然后同步 或者 异步 执行 方法
- 多线程GCD+同步执行+异步执行+并行执行+串行执行+重复、分组、延迟、障碍方法
- Spring中@Async注解执行异步任务的方法
- QT 异步函数转为同步函数的方法
- nodejs,async同步执行方法
- GCD编程dispatch_sync(同步)和dispatch_async(异步)方式执行并发队列任务区别
- AsyncCallback方法和主线程怎么同步呢?
- 19、构建多线程应用程序:委托异步调用方法(BeginInvoke,EndInvoke,AsyncCallback)
- C#:异步编程和线程的使用(.NET 4.5 ),异步方法改为同步执行
- node下使用async同步执行异步函数
- 同步调用异步方法how-would-i-run-an-async-taskt-method-synchronously
- 异步方法同步执行的帮助类
- C#下Socket对象的BeginReceive方法,执行后竟然不调用AsyncCallback里的回调函数
- AsyncCallback方法和主线程怎么同步呢?
- QT 异步函数转为同步函数的方法
- Spring Boot @Async 异步任务执行方法