C#5.0 异步编程 Async和Await--异步方法的规范和注意事项
要些异步方法要注意一下几点:
异步方法的返回值有三种:
1.没有任何返回值的void
2.返回一个Task任务的Task,可以获得该异步方法的执行状态
3.返回Task<T> 可以获得异步方法执行的结果和执行状态
下面看示例:
如果你认为你的异步任务不需要知道它的执行状态(是否出现异常等)可以使用没有返回值的void签名(强烈建议不要在正式项目中使用void的异步方法)
public static async void FireAndForget()
{
var myTask = Task.Run(() =>
{
for (int i = ; i < ; i++)
{
Console.WriteLine("DoWork : {0}", i);
Thread.Sleep();
}
});
await myTask;
}
如果你需要知道任务的执行状态则使用Task的签名
static Task SayHello(string name)
{
return Task.Run(() =>
{
Console.WriteLine("你好:{0}",name);
});
} static async Task SayHelloAsync(string name)
{
await SayHello(name);
}
如果你需要获得异步方法的结果可以使用Task<T>的签名
static Task<int> SumArray(int[] arr)
{
return Task.Run(() => arr.Sum());
} static async Task<int> GetSumAsync(int[] arr)
{
int result = await SumArray(arr);
return result;
} static async void GetTaskOfTResult()
{
int[] arr = Enumerable.Range(, ).ToArray();
Console.WriteLine("result={0}", GetSumAsync(arr).Result); int result = await GetSumAsync(arr);
Console.WriteLine("result={0}", result);
}
除了上面的三个异步方法的例子,还可以使用lambda表达式来创建异步方法 只要在lambda表达式参数前加async 在表达式内部使用await即可
public static void TestAsyncLambda()
{
Action act = async () =>
{
for (int i = ; i < ; i++)
{
Console.WriteLine("Do Work {0}", i);
await Task.Delay();
}
};
act();
}
上面的例子我们可以看到,我们可以使用Task.Delay方法来异步等待方法,而不会阻塞线程的执行
C#5.0 异步编程 Async和Await--异步方法的规范和注意事项的更多相关文章
- C#5.0 异步编程async/await用法
微软在发布VS2012的同时推出了C#5.0,其中包含了async和await 代码如下: class Program { private static readonly Stopwatch watc ...
- .NET4.5 异步编程 async和await
msdn介绍:https://msdn.microsoft.com/zh-cn/library/hh191443.aspx 其实很简单,标记了async的方法为异步方法,从方法的左大括号开始同步执行, ...
- C#异步编程(async and await)及异步方法同步调用
1.什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件.连接远程计算机或查询数据库=异步操作在主应用程序线程以外的线程中执行.应用程序调用方法异步执行某个操作时,应用程序可在异步方 ...
- 异步编程- async和await
使用目的 避免阻塞主线程 提高程序响应能力 C#中使用 C# 中的 Async 和 Await 关键字是异步编程的核心. 疑惑 The async and await keywords don't c ...
- C#中的异步编程Async 和 Await
谈到C#中的异步编程,离不开Async和Await关键字 谈到异步编程,首先我们就要明白到底什么是异步编程. 平时我们的编程一般都是同步编程,所谓同步编程的意思,和我们平时说的同时做几件事情完全不同. ...
- .net异步编程async和await的讨论收获
微软官方描述: C# 5 引入了一种简便方法,即异步编程.此方法利用了 .NET Framework 4.5 及更高版本..NET Core 和 Windows 运行时中的异步支持. 编译器可执行开发 ...
- C#5.0 异步编程 Async和Await--介绍
C#5.0引入async和await关键字实现方法的异步调用. 直接进入正题. async只是一个标识符,并没有实际的用途,只是用于表明某个方法是异步方法,在方法前面加上async 表示该方法为一个异 ...
- C#异步编程----async和await组合的写法
微软示例: private async void StartButton_Click(object sender, RoutedEventArgs e) { // ExampleMethodAsync ...
- 彻底搞懂C#异步编程 async和await的原理
1.前提 熟练掌握Task并行编程. 2.用Task并行解释async和await异步 因为控制台有多线程操作的优化,因此这里选择winform来做示例. 测试代码如下所示: 有三个textbox,一 ...
随机推荐
- 44.和为S的两个数字
题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 思路分析: 数组是递增排序的,我们先将数组遍历一遍 ...
- git pull的时候发生冲突的解决方法之“error: Your local changes to the following files would be overwritten by merge”
今天在使用git pull 命令的时候发生了以下报错 目前git的报错提示已经相关友好了,可以直观的发现,这里可以通过commit的方式解决这个冲突问题,但还是想看看其他大佬是怎么解决这类问题的 在网 ...
- java的几种定时器
https://blog.csdn.net/coolwindd/article/details/82804189 1.@Scheduled注解 @Scheduled注解是最简单的方式,只需要启用定时器 ...
- Flask-SQLAlchemy使用方法
Flask-SQLAlchemy使用起来非常有趣,对于基本应用十分容易使用,并且对于大型项目易于扩展.有关完整的指南,请参阅 SQLAlchemy 的 API 文档. 常见情况下对于只有一个 Flas ...
- Nginx+Keepalived主从配置(双机主从热备)+Tomcat集群
拓扑环境 以下表格是这次測试须要的拓扑环境,几台server.每台server上安装什么,都有介绍. server名称 系统版本号 预装软件 IP地址/VIP Nginx主server CentOS ...
- 力扣—Remove Duplicates from Sorted List(删除排序链表中的重复元素)python实现
题目描述: 中文: 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2输出: 1->2 示例 2: 输入: 1->1->2 ...
- MD5文件去重
//计算文件的MD5码 private string getMD5Hash(string pathName) { string strResult = ""; string str ...
- JavaSE---多线程---概述
1.概述 1.1 进程: 系统进行资源分配.调度的一个独立单元: 进程的特征: 1.1.1 独立性: 系统中独立存在的实体,拥有自己独立的资源: 每个进程都拥有自己私有的地址空间,在没有经过进程本身允 ...
- Solr安装步骤 + dataimport导入数据配置
一:安装solr服务器 1.导入安装包到 /usr/local/solr/singleSolr目录下 解压tomat命令:tar -zxvf apache-tomcat-7.0.47.tar.gz 解 ...
- php socket简单原理及实现笔记
1.什么是socket? socket:网络上的两个程序通过一个双向的通信连接实现数据的交换,连接的一端称为一个socket. 因此socket运行是置少有2个端组成,一个为服务端一个为客户端(客户端 ...