十异步

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

线程安全和信号量

多线程访问同一段代码 产生不确定结果。

 

以上是关于十异步的主要内容,如果未能解决你的问题,请参考以下文章

十异步工具Timer

ES7-Es8 js代码片段

当片段视图加载是异步任务的一部分时,如何在片段加载之前显示进度条?

系统学习消息队列分享(十) 如何实现高性能的异步网络传输?

从片段中调用分离的异步任务类

Android 我应该在异步任务中将片段作为弱引用传递吗?