首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[C#] 异步编程async/await测试笔记

[C#] 异步编程async/await测试笔记

作者头像
科控物联
发布2022-04-19 14:07:22
发布2022-04-19 14:07:22
39300
代码可运行
举报
文章被收录于专栏:科控自动化科控自动化
运行总次数:0
代码可运行

使用 Async 和 Await 的异步编程

Async await

方法使用Async修饰符修饰. 返回类型仅有三种: void,Task,Task<T> 方法内部使用await关键字标明开始执行异步代码 await标志前的代码是同步执行,await标志的方法是异步执行,await标志的方法后面的代码相当于"回调函数",在await标志的异步方法后面执行. 所以使用Async await异步编程之后代码的执行顺序会变成上图所示。

直接搞一个测试程序:

代码语言:javascript
代码运行次数:0
运行
复制
XTrace.WriteLine("我是主线程!");
XTrace.WriteLine("准备调用异步方法AsyncTask.");
 AsyncTask();//调用Async修饰的方法
XTrace.WriteLine("我是主线程,继续执行。。。。.");
XTrace.WriteLine("我是主线程,完工!");
Console.ReadLine();
//Async修饰的方法
 async Task AsyncTask()
{
    XTrace.WriteLine($"我是方法AsyncTask");
    var result = await WasteTime();
    XTrace.WriteLine(result);
    XTrace.WriteLine("我是方法AsyncTask,完工!");
}

 async Task<string> WasteTime()
{
    return await Task.Run(() =>
    {
        Thread.Sleep(1);//避免XTrace.WriteLine执行太快使整个程序执行起来像是同步执行的
        XTrace.WriteLine("我是WasteTime,开始异步执行了!");
        XTrace.WriteLine("我是WasteTime,我正在摸鱼。。。。");
        Thread.Sleep(5000);
        return "我是WasteTime,我异步执行完了";
    });
}

如果再AsyncTask()加一个await ,逻辑就变了。

代码语言:javascript
代码运行次数:0
运行
复制
XTrace.WriteLine("我是主线程!");
XTrace.WriteLine("准备调用异步方法AsyncTask.");
await AsyncTask();//调用Async修饰的方法
XTrace.WriteLine("我是主线程,继续执行。。。。.");
XTrace.WriteLine("我是主线程,完工!");
Console.ReadLine();
//Async修饰的方法
 async Task AsyncTask()
{
    XTrace.WriteLine($"我是方法AsyncTask");
    var result = await WasteTime();
    XTrace.WriteLine(result);
    XTrace.WriteLine("我是方法AsyncTask,完工!");
}

 async Task<string> WasteTime()
{
    return await Task.Run(() =>
    {
        Thread.Sleep(1);//避免XTrace.WriteLine执行太快使整个程序执行起来像是同步执行的
        XTrace.WriteLine("我是WasteTime,开始异步执行了!");
        XTrace.WriteLine("我是WasteTime,我正在摸鱼。。。。");
        Thread.Sleep(5000);
        return "我是WasteTime,我异步执行完了";
    });
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用 Async 和 Await 的异步编程
  • Async await
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档