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

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

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. Java调用DB的存储过程

    2015/12/7 使用数据库存储过程的java代码:   try {            con = (Connection) DBProxy.getConnection(null);       ...

  2. SVN版本管理 目录结构

    一. SVN标准目录 Subversion有一个很标准的目录结构,是这样的.比如项目是 proj,svn地址为 svn://proj/,那么标准的 svn 布局是: 这是一个标准的布局,trunk为主 ...

  3. shutdown - 关闭系统

    总览 SYNOPSIS /sbin/shutdown [-t sec] [-arkhncfF] time [warning-message] 描述 DESCRIPTION shutdown 以一种安全 ...

  4. SHELL自动化--接口测试

    #!/bin/bash fileNum=`ls /bin/testShell/apiCheck_shell/logs/ | grep $(date "+%Y-%m-%d") | w ...

  5. Linux学习笔记之认识与学习Bash

    什么是shell:shell是一个翻译器,将所敲的命令翻译成CPU能理解的语言,之后CPU再去执行,CPU执行后返回给shell,shell再翻译成我们所能理解的语言并显示:终端并不是shell,而是 ...

  6. FTP上传脚本

    脚本名称:uploadToFtp.sh 脚本用途:上传文件到FTP服务器 脚本参数:$1:FTP服务器的路径,$2:本地文件 #!/bin/bash FTP_USER="testfile&q ...

  7. python--内置函数、匿名函数、递归调用

    匿名函数 有名函数: def func1(x): print(func1) 结果: <function func1 at 0x00000000005C3E18> 匿名函数: func2=l ...

  8. delphi 动态获取文件类型的图标

    delphi 动态获取文件类型的图标.txt我不奢望什么,只希望你以后的女人一个不如一个.真怀念小时候啊,天热的时候我也可以像男人一样光膀子!在应用程序的编写中,组合框(ComboBox).列表框(L ...

  9. Some Simple Mistakes I had

    This week, I had some mistakes. It is really hard to say: #1 py business what's happening l = abs(px ...

  10. 【Tomcat】2.配置Tomcat服务器端口和HTTPS

    1.修改XML配置文件 找到Tomcat安装目录下的conf文件夹,打开server.xml文件(可以用笔记本打开) 其中有几行代码如下 <Server port="8005" ...