[C#] 走进异步编程的世界 - 剖析异步方法(上)
2016-09-12 09:24
381 查看
走进异步编程的世界 - 剖析异步方法(上)
序
这是上篇《走进异步编程的世界 - 开始接触 async/await 异步编程》(入门)的第二章内容,主要是与大家共同深入探讨下异步方法。本文要求了解委托的使用。
目录
介绍异步方法控制流
await 表达式
How 取消异步操作
介绍异步方法
异步方法:在执行完成前立即返回调用方法,在调用方法继续执行的过程中完成任务。语法分析:
(1)关键字:方法头使用 async 修饰。
(2)要求:包含 N(N>0) 个 await 表达式(不存在 await 表达式的话 IDE 会发出警告),表示需要异步执行的任务。【备注】感谢 czcz1024 的修正与补充:没有的话,就和普通方法一样执行了。
(3)返回类型:只能返回 3 种类型(void、Task 和 Task<T>)。Task 和 Task<T> 标识返回的对象会在将来完成工作,表示调用方法和异步方法可以继续执行。
(4)参数:数量不限。但不能使用 out 和 ref 关键字。
(5)命名约定:方法后缀名应以 Async 结尾。
(6)其它:匿名方法和 Lambda 表达式也可以作为异步对象;async 是一个上下文关键字;关键字 async 必须在返回类型前。
internal class Program { private static void Main(string[] args) { CancellationTokenSource source = new CancellationTokenSource(); CancellationToken token = source.Token; var t = Do.ExecuteAsync(token); //Thread.Sleep(3000); //挂起 3 秒 //source.Cancel(); //传达取消请求 t.Wait(token); //等待任务执行完成 Console.WriteLine($"{nameof(token.IsCancellationRequested)}: {token.IsCancellationRequested}"); Console.Read(); } } internal class Do { /// <summary> /// 异步执行 /// </summary> /// <param name="token"></param> /// <returns></returns> public static async Task ExecuteAsync(CancellationToken token) { if (token.IsCancellationRequested) { return; } await Task.Run(() => CircleOutput(token), token); } /// <summary> /// 循环输出 /// </summary> /// <param name="token"></param> private static void CircleOutput(CancellationToken token) { Console.WriteLine($"{nameof(CircleOutput)} 方法开始调用:"); const int num = 5; for (var i = 0; i < num; i++) { if (token.IsCancellationRequested) //监控 CancellationToken { return; } Console.WriteLine($"{i + 1}/{num} 完成"); Thread.Sleep(1000); } } }
View Code
图3-1
图3-2 注释两行代码
图3-3:图3-1和图3-2的执行结果(注释两行代码)
上图是不调用 Cancel() 方法的结果图,不会取消任务的执行。
下图在 3 秒后调用 Cancel() 方法取消任务的执行:
图3-4:去掉注释
图3-5:图3-1和图3-4的执行结果(去掉注释)
小结
介绍异步方法的语法、三种不同的返回值类型(void、Task 和 Task<T>)和控制流程等。简单常用的异步执行方式:Task.Run()。【注意】它是在不同的线程上执行方法。
如何取消异步操作。
传送门
入门:《开始接触 async/await 异步编程》补充篇:《走进异步编程的世界 - 剖析异步方法(下)》
GUI 篇:《走进异步编程的世界 - 在 GUI 中执行异步操作》
原文链接:http://www.cnblogs.com/liqingwen/p/5844095.html
【参考】《Illustrated C# 2012》
相关文章推荐
- [C#] 走进异步编程的世界 - 剖析异步方法(下)
- [C#] 走进异步编程的世界 - 在 GUI 中执行异步操作
- C# 代码示例详尽剖析异步调用的两种方法
- [C#] 走进异步编程的世界 - 开始接触 async/await
- C# 异步编程 异步委托调用同步方法
- C#~异步编程再续~async异步方法与同步方法的并行
- [C#] 走进异步编程的世界 - 开始接触 async/await(转)
- 转:C#异步调用四大方法
- c#中两种常用的异步调用方法
- 三种异步编程模型(APM)获取异步返回结果的方法
- C#异步调用方法总结
- C#语言中的异步方法调用
- C#异步调用的好处和方法
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)----使用方法
- C#异步调用的好处和方法
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)----使用方法
- dhl:C#异步方法调用(使用委托,在委托上调用BeginInvoke方法)
- 关于C#异步方法调用
- C#异步方法调用(四大方法详解)
- C#语言中的异步方法调用