找回密码
 注册帐号

扫一扫,访问微社区

小贱 async和await到底怎么玩?

12
回复
7527
查看
[ 复制链接 ]
排名
1155
昨日变化

18

主题

162

帖子

2427

积分

Rank: 9Rank: 9Rank: 9

UID
14099
好友
24
蛮牛币
3175
威望
0
注册时间
2014-2-11
在线时间
647 小时
最后登录
2020-10-20

七夕浪漫情人专栏作家

QQ
2020-10-17 09:23:41 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
太久太久没回来了,一登录一堆的未读,感谢各位看得起哈!
今天来讲讲async和await的用法,也是因为面试了太多的人,发现异步编程听了很多,看了很多,可是async和await还是用不明白。
我要讲的内容很少,5分钟解决战斗,但会让你看得很明白。
[mw_shl_code=csharptrue]
class Program
{
    static async Task A()
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine(\"Before Method 1\");
            Thread.Sleep(500);
        }
        await Task.Run(() =>
        {
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine(\"Method 1\");
                Thread.Sleep(500);
            }
        });
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine(\"After Method 1\");
            Thread.Sleep(500);
        }
    }

    static void B()
    {
        for (int i = 0; i < 15; i++)
        {
            Console.WriteLine(\"Method 2\");
            Thread.Sleep(500);
        }
    }

    static void Main(string[] args)
    {
        _ = A();
        B();
        Console.ReadKey();
    }
}

[/mw_shl_code]

先别急着复制去跑,先想想这代码跑完是个什么结果?~
~
~
~
~
~
~
~
~
~
10秒到了,有答案了吗?
捕获.PNG


是不是这样的?不是?那你听我讲。
1.async修饰的方法,再没有遇到await前,都是同步方法(你试试只加async不加await是不是有警告);
2.遇到await线程开始切换上下文(异步的开始);
3.await后的同步方法(你看着觉得是同步),实际并不在主线程运行,所以“After Method 1”并没有阻塞“Method 2”;
就三句话,看明白了吗?







回复

使用道具 举报

5熟悉之中
766/1000
排名
14230
昨日变化
1

0

主题

86

帖子

766

积分

Rank: 5Rank: 5

UID
276112
好友
0
蛮牛币
2082
威望
0
注册时间
2018-4-8
在线时间
622 小时
最后登录
2021-3-8
2020-10-19 10:08:51 显示全部楼层
没有。。。。
回复

使用道具 举报

7日久生情
3716/5000
排名
794
昨日变化

6

主题

598

帖子

3716

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
26340
好友
1
蛮牛币
1208
威望
0
注册时间
2014-5-23
在线时间
1902 小时
最后登录
2021-3-8
2020-10-19 12:12:38 显示全部楼层
不懂!!!!!!!!!!!!!
回复

使用道具 举报

排名
64951
昨日变化

0

主题

32

帖子

84

积分

Rank: 2Rank: 2

UID
151515
好友
0
蛮牛币
4
威望
0
注册时间
2016-6-11
在线时间
50 小时
最后登录
2020-11-30
2020-10-19 15:31:11 显示全部楼层
百度一下,很容易吵到详细的逻辑
回复 支持 反对

使用道具 举报

4四处流浪
318/500
排名
64951
昨日变化

0

主题

45

帖子

318

积分

Rank: 4

UID
327914
好友
0
蛮牛币
270
威望
0
注册时间
2019-7-23
在线时间
271 小时
最后登录
2021-3-9
2020-11-4 08:45:53 显示全部楼层
分享是个好习惯
回复

使用道具 举报

排名
669
昨日变化

20

主题

1195

帖子

3799

积分

Rank: 9Rank: 9Rank: 9

UID
68430
好友
14
蛮牛币
19278
威望
0
注册时间
2015-1-14
在线时间
1209 小时
最后登录
2021-3-5
2020-11-11 12:00:26 显示全部楼层
原来这里有总结~~哈哈
回复 支持 反对

使用道具 举报

7日久生情
1644/5000
排名
1985
昨日变化

36

主题

196

帖子

1644

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
144217
好友
2
蛮牛币
9411
威望
0
注册时间
2016-4-1
在线时间
786 小时
最后登录
2021-3-3
2020-11-26 09:37:40 显示全部楼层
哎,你拿这面试,直接挂掉你
回复 支持 反对

使用道具 举报

7日久生情
3627/5000
排名
10707
昨日变化
1

0

主题

1613

帖子

3627

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
301976
好友
1
蛮牛币
3545
威望
0
注册时间
2018-10-31
在线时间
1916 小时
最后登录
2021-3-8
2020-11-27 14:18:54 显示全部楼层
感谢大佬分享   
回复 支持 反对

使用道具 举报

3偶尔光临
259/300
排名
18292
昨日变化

3

主题

75

帖子

259

积分

Rank: 3Rank: 3Rank: 3

UID
160555
好友
0
蛮牛币
455
威望
0
注册时间
2016-8-4
在线时间
147 小时
最后登录
2020-12-24
2020-12-18 18:11:24 显示全部楼层
大佬,中间 Method 1 和Method 2 的先后是不固定的吗?M1-M2-M1-M2-M1-M2 到这开始变成M1-M1-M2-M2了。
回复 支持 反对

使用道具 举报

3偶尔光临
286/300
排名
10111
昨日变化

0

主题

83

帖子

286

积分

Rank: 3Rank: 3Rank: 3

UID
191422
好友
0
蛮牛币
506
威望
0
注册时间
2016-12-12
在线时间
95 小时
最后登录
2021-1-18
2020-12-22 12:10:19 显示全部楼层
为了说明问题,可以把线程id  log出来的
回复 支持 反对

使用道具 举报

5熟悉之中
675/1000
排名
8330
昨日变化

5

主题

262

帖子

675

积分

Rank: 5Rank: 5

UID
252298
好友
1
蛮牛币
719
威望
0
注册时间
2017-11-3
在线时间
262 小时
最后登录
2021-2-19
2020-12-25 14:21:09 显示全部楼层
sao ga 666
回复

使用道具 举报

0

主题

6

帖子

6

积分

Rank: 1

UID
355800
好友
0
蛮牛币
10
威望
0
注册时间
2021-1-6
在线时间
0 小时
最后登录
2021-1-6
2021-1-6 23:25:25 显示全部楼层
。。。不是很清楚
回复

使用道具 举报

7日久生情
2013/5000
排名
4166
昨日变化

19

主题

463

帖子

2013

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
18541
好友
8
蛮牛币
1051
威望
0
注册时间
2014-3-22
在线时间
1173 小时
最后登录
2021-3-8
2021-1-21 10:29:06 显示全部楼层
没看明白
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则