博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Async await 异步编程说明
阅读量:5278 次
发布时间:2019-06-14

本文共 2228 字,大约阅读时间需要 7 分钟。

  希望在编程上有些许提高所以 最近连续2篇博客都在说明多线程和异步编程的使用,异步和多线程之间区别请自行百度,因为理解不是特别透彻就不在叙述以免误导大家,这里写下新研究整理 task  和 await 的异步编程使用

调用子方法和耗时方法如下

///         /// 有返回值异步方法        ///         /// 
static async Task
HaveReturnAsync() { await Task.Run(() => Method1("HaveReturnAsync")); // part_001 //Task t1 = new Task(() => sss()); //t1.Start(); Console.WriteLine("ccc"); //part_003 return 10; } ///
/// 耗时输出方法 /// ///
static void Method1(string name) { string temp1 = ""+name+"_1"; string temp2 = "" + name + "_2"; Console.WriteLine(temp1); Thread.Sleep(500); Console.WriteLine(temp2); }

  调用主方法

//无返回值            //Async2();            //Console.WriteLine("Async2-Bakc");                // 有返回值            var ll = HaveReturnAsync();                        Console.WriteLine("aaa"); //part_002            Console.WriteLine("llValue:" + ll.Result); // part_003            Console.ReadKey();

执行结果

 从执行结果可以看出在执行HaveReturnAsync:async Task<int> HaveReturnAsync()   主线程不会等待会直接输出//part_002 ,但在HaveReturnAsync() 方法体内 会等待 Method1 方法执行完

再输出 Console.WriteLine("ccc"); //part_003,看到这里大家会对 await 有一定了解了吧,从整体来看 主线程 调用HaveReturnAsync 是异步,在HaveReturnAsync() 方法体内 调用 Method1 用await 使其会等待Method1 执行完后

,再执行下面代码是同步。

一个async方法里通常包含一个或多个的对应的await操作符,但如果没有await表达式也不会导致编译错误。但如果调用一个async方 法,却不使用await关键字来标记一个挂起点的话,程序将会忽略async关键字并以同步的方式执行

 

******** 2019-06-25 补充             var ll = HaveReturnAsync();     类似执行耗时方法多个时  **先不加 await            Console.WriteLine("aaa"); //part_002            Console.WriteLine("llValue:" + await ll)    这个时候加 await 等待 多个结果如果有多个耗时方法时 这样就可以节省时间

 

总结
 1.一个异步方法的声明中必然包含一个async的修饰符。
 2.异步方法的方法名可以以“Async”结尾。
 3.Task<TResult> 当你的方法有返回值时,那么TResult即返回值的类型
 4.方法通常至少包含一个await表达式。

5. 建议使用await,.Result容易造成死锁。

await 时是释放线程,线程能去执行其它任务;.Result 就是让线程暂停,等待结果

6  Web 服务器的可用线程是有限的,而在高负载情况下的可能所有线程都被占用。 当发生这种情况的时候,服务器就无法处理新请求,直到线程被释放。 使用同步代码时,可能会出现多个线程被占用但不能执行任何操作的情况,因为它们正在等待 I/O 完成。 使用异步代码时,当进程正在等待 I/O 完成,服务器可以将其线程释放用于处理其他请求。 因此,异步代码可以使服务器资源能够更有效地使用和服务器能够处理更多流量不会延迟。

 

希望上面描述对大家对异步编程有初步了解,如有疑问可以一起讨论。

 

转载于:https://www.cnblogs.com/liyanbofly/p/7919677.html

你可能感兴趣的文章
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
0925 韩顺平java视频
查看>>
iOS-程序启动原理和UIApplication
查看>>
mysql 8.0 zip包安装
查看>>
awk 统计
查看>>
模板设计模式的应用
查看>>
实训第五天
查看>>
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
java选择文件时提供图像缩略图[转]
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
iOS8统一的系统提示控件——UIAlertController
查看>>
PAT甲级——1101 Quick Sort (快速排序)
查看>>
python创建进程的两种方式
查看>>