要些异步方法要注意一下几点:

异步方法的返回值有三种:

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--异步方法的规范和注意事项的更多相关文章

  1. C#5.0 异步编程async/await用法

    微软在发布VS2012的同时推出了C#5.0,其中包含了async和await 代码如下: class Program { private static readonly Stopwatch watc ...

  2. .NET4.5 异步编程 async和await

    msdn介绍:https://msdn.microsoft.com/zh-cn/library/hh191443.aspx 其实很简单,标记了async的方法为异步方法,从方法的左大括号开始同步执行, ...

  3. C#异步编程(async and await)及异步方法同步调用

    1.什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件.连接远程计算机或查询数据库=异步操作在主应用程序线程以外的线程中执行.应用程序调用方法异步执行某个操作时,应用程序可在异步方 ...

  4. 异步编程- async和await

    使用目的 避免阻塞主线程 提高程序响应能力 C#中使用 C# 中的 Async 和 Await 关键字是异步编程的核心. 疑惑 The async and await keywords don't c ...

  5. C#中的异步编程Async 和 Await

    谈到C#中的异步编程,离不开Async和Await关键字 谈到异步编程,首先我们就要明白到底什么是异步编程. 平时我们的编程一般都是同步编程,所谓同步编程的意思,和我们平时说的同时做几件事情完全不同. ...

  6. .net异步编程async和await的讨论收获

    微软官方描述: C# 5 引入了一种简便方法,即异步编程.此方法利用了 .NET Framework 4.5 及更高版本..NET Core 和 Windows 运行时中的异步支持. 编译器可执行开发 ...

  7. C#5.0 异步编程 Async和Await--介绍

    C#5.0引入async和await关键字实现方法的异步调用. 直接进入正题. async只是一个标识符,并没有实际的用途,只是用于表明某个方法是异步方法,在方法前面加上async 表示该方法为一个异 ...

  8. C#异步编程----async和await组合的写法

    微软示例: private async void StartButton_Click(object sender, RoutedEventArgs e) { // ExampleMethodAsync ...

  9. 彻底搞懂C#异步编程 async和await的原理

    1.前提 熟练掌握Task并行编程. 2.用Task并行解释async和await异步 因为控制台有多线程操作的优化,因此这里选择winform来做示例. 测试代码如下所示: 有三个textbox,一 ...

随机推荐

  1. vue证明题二,让vue跑起来

    使用vue有很多连带产品,大多数入门的并非看不懂官方文档,也并非不会语法,而是卡在这些连带产品上 笔者刚刚入手这台电脑,什么都没装,就以此开始,从头构建一个vue项目吧,哪怕没有任何基础,跟着来应该是 ...

  2. microtime函数用法

    /** * microtime函数 * 返回:如果参数为空,则返回字符串 "微妙部分(单位:秒) 秒",字符串的两部分都是以"秒"为单位返回的 * 如果参数为 ...

  3. spring静态资源配置

    优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...

  4. 五、通过密码访问API

    通过密码访问API 一.客户端 图: 客户端请求代码: static void Main(string[] args) { Console.WriteLine("确定三个项目都已经启动&qu ...

  5. 开源的android客户端,ghost网站

    https://github.com/TryGhost/Ghost-Android http://docs.ghostchina.com/zh/

  6. Java网络编程:什么是Socket编程?

    所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 我们开发的网络应用 ...

  7. 所有anaconda安装包失败的解决办法汇总

    多试几次,有时候网络不稳定下载一半会停掉 更改Pip源 pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple 1.首先确认镜像源 ...

  8. sqlserver数据导入问题:报错“对COM组件的调用返回了错误HRESULT E_FAIL”

    SQL server 2008,导出了两个sql文件. 打开第一个文件,没有问题,建好相应的数据库,运行脚本,即可导入. 第二个文件却遇到问题,始终报错“对COM组件的调用返回了错误HRESULT E ...

  9. U200-SNMP

    U200配置snmp snmp-agent sys-info version v2c snmp-agent community read jkzh snmp-agent trap enable snm ...

  10. sql server教程

    简单认识 SQL Server sql server教程 SQL Server 是 Microsoft 开发的一个关系数据库管理系统(RDBMS),现在是世界上最为常用的数据库: SQL Server ...