async 声明一个包含异步代码的函数,该函数执行时不会阻塞调用线程。

async标记的函数返回值必须为 void ,Task,Task<TResult>

await 必须修饰Task 或者Task<TResult>

await之后的代码运行线程:对于纯console工程,还是耗时任务的线程,

对于winform线程,则是调用线程。

典型代码

        public static async Task<int> CalAsync()
{
string tid = Thread.CurrentThread.ManagedThreadId.ToString();
Console.WriteLine("当前位置async函数,await之前,线程ID"+tid);
int result = await Task.Run(new Func<int>(Cal));
tid = Thread.CurrentThread.ManagedThreadId.ToString();
Console.WriteLine("当前位置async函数,await之后,线程ID" + tid);
return result;
}

全部代码

class Program
{
static void Main(string[] args)
{
string tid = Thread.CurrentThread.ManagedThreadId.ToString();
Console.WriteLine("当前位置主函数,调用async异步之前,线程ID"+tid);
Task<int> t = CalAsync();
Console.WriteLine("当前位置主函数,调用async异步之后,线程ID" + tid);
Console.Read(); }
public static async Task<int> CalAsync()
{
string tid = Thread.CurrentThread.ManagedThreadId.ToString();
Console.WriteLine("当前位置async函数,await之前,线程ID"+tid);
int result = await Task.Run(new Func<int>(Cal));
tid = Thread.CurrentThread.ManagedThreadId.ToString();
Console.WriteLine("当前位置async函数,await之后,线程ID" + tid);
return result;
} public static int Cal()
{
string tid = Thread.CurrentThread.ManagedThreadId.ToString();
Console.WriteLine("当前位置耗时函数,线程ID"+tid);
int sum = ;
for (int i = ; i < ; i++)
{
sum = sum + i;
}
Console.WriteLine("当前位置耗时函数完成,线程ID" + tid);
return sum;
} }

输入内容

winform中优雅的实现

private async void button1_Click(object sender, EventArgs e)
{
var t = Task.Run(() =>
{
Thread.Sleep();
return "Returning from TimeConsuming task";
});
this.Text = await t;
}

参考

https://www.cnblogs.com/doforfuture/p/6293926.html

C# async await的使用的更多相关文章

  1. async & await 的前世今生(Updated)

    async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...

  2. [.NET] 利用 async & await 的异步编程

    利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异 ...

  3. [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程

    怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html  ...

  4. [.NET] 利用 async & await 进行异步 IO 操作

    利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html  序 上次,博主 ...

  5. [C#] 走进异步编程的世界 - 开始接触 async/await

    走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $&qu ...

  6. ASP.NET 中的 Async/Await 简介

    本文转载自MSDN 作者:Stephen Cleary 原文地址:https://msdn.microsoft.com/en-us/magazine/dn802603.aspx 大多数有关 async ...

  7. C# async/await 使用总结

    今天搞这两个关键字搞得有点晕,主要还是没有彻底理解其中的原理. 混淆了一个调用异步方法的概念: 在调用异步方法时,虽然方法返回一个 Task,但是其中的代码已经开始执行.该方法在调用时,即刻执行了一部 ...

  8. 【转】async & await 的前世今生

    async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...

  9. async & await 的前世今生

    async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...

  10. C# Async, Await and using statements

    Async, Await 是基于 .NEt 4.5架构的, 用于处理异步,防止死锁的方法的开始和结束, 提高程序的响应能力.比如: Application area           Support ...

随机推荐

  1. python中的堆和栈

    内存中的堆栈和数据结构堆栈不是一个概念,可以说内存中的堆栈是真实存在的物理区,数据结构中的堆栈是抽象的数据存储结构.内存空间在逻辑上分为三部分:代码区.静态数据区和动态数据区,动态数据区又分为栈区和堆 ...

  2. [Android]第一个cm调试分析

    0x00:写在前面  一直想入门Android安全,当时是极客大挑战出题的时候,被cx表哥甩锅强行去学了点android的开发,之后慢慢接触,感觉还是挺有意思的.cx表哥说先从逆向分析入门吧,之后可以 ...

  3. react-native连接夜神模拟器

    配置好adb的环境变量 新建 ADB_MY_HOME C:\Users\Administrator\AppData\Local\Android\Sdk\platform-tools 然后加入path ...

  4. vue 项目安装

    安装stylus npm install stylus stylus-loader --save-dev

  5. Java线程中的异常处理

    对于对线程,当主线程中有子线程运行出现异常时,主线程是不能捕获到该异常的,子线程会直接退出,不会记录任何日志. 解决: 1.子线程中try catch. 2.设置线程的未捕获异常处理器,Uncaugh ...

  6. C++入门经典-例8.1-类的继承

    1:继承是面向对象的主要特征(此外还有封装和多态)之一,它使得一个类可以从现有类中派生,而不必重新定义一个新类.继承的实质就是用已有的数据类型创建新的数据类型,并保留已有数据类型的特点,以旧类为基础创 ...

  7. github搜索不到代码的问题

    Hi team, Please check the following three query url :https://github.com/Konctantin/GreyMagic/search? ...

  8. FScapture录屏后导致麦克风无声问题

  9. java 包引入时*会全部加载吗

    有一个虚拟机参数: -XX:+TraceClassLoading 这两种写法,最终加载的类是一样的. 对比了一下输出的都是618行

  10. vue文件流转换成pdf预览(pdf.js+iframe)

    参考文档:https://www.jianshu.com/p/242525315bf6 PDFJS: https://mozilla.github.io/pdf.js/     支持获取文件流到客户端 ...