十异步
Posted fger
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十异步相关的知识,希望对你有一定的参考价值。
一、异步是什么
如果一个程序调用某个方法,等待其执行所有处理后才继续执行,我们称这样的方法是同步的。
如果一个程序调用某个方法,在该方法处理完成之前就返回到调用方法,则这个方法是异步的。
异步的好处在于非阻塞,因此我们把一些不需要立即使用结果、较耗时的任务设为异步时,可以提高程序的运行效率。
二、异步方法
在C#5.0中出现的 async/await 可以方便的创建并调用异步方法,async/await特性包括三个部分
1.调用方法:就是调用异步方法的方法
2.async方法:异步方法,被调用时立即返回到调用方法
3.await表达式:在异步方法内部,表示异步执行的任务并取返回值。一个异步方法可以包含多个await表达式,即一个异步方法可以有多个异步执行的任务。
private async Task<int> MethodAsync();//有返回值的异步方法 private async Task MethodAsync();//无返回值的异步方法 private async void btnOk_Click();//异步事件处理程序
await是一个运算符,它表示等待异步执行的结果。也可以理解为await运算符实际上是对方法的返回值进行操作,也就是对Task<Result>进行操作,而不是对方法本身进行操作。还有一点要注意,await是一定要放在异步方法的内部,如果没有放在内部的话,VS会自动报错。
三、Thread.Sleep 是同步延迟,Task.Delay异步延迟。
await和同步编程最大的不同之处是:异步等待任务完成的时候,在不会继续执行后面的代码时,也不会影响界面的操作。在.NET提供的类中,异步方法都是约定用Async作为后缀,这样可以很清楚的知道这个方法是异步方法还是同步方法。
1.直接创建 Task task = new Task(() => { MultiplyMethod(a, b); }); task.Start(); 2.4.5以后Run运行 Task task = Task.Run(() => { MultiplyMethod(a, b); }); 3.工厂创建 Task task = Task.Factory.StartNew(() => { MultiplyMethod(a, b); });
当async await一起使,是异步。
当仅仅是Task.Result时,是同步(没有意义)。
https://www.cnblogs.com/neverc/p/4653539.html
https://www.cnblogs.com/myprogram/p/4902738.html
线程安全和信号量
多线程访问同一段代码 产生不确定结果。
以上是关于十异步的主要内容,如果未能解决你的问题,请参考以下文章