卡卷网
当前位置:卡卷网 / 每日看点 / 正文

C#为何一定要用asyn和await来异步执行,不可以直接Task.Run?

作者:卡卷网发布时间:2025-01-02 15:32浏览数量:84次评论数量:0次

先说结论

其实不是"一定要用async/await",而是它们各自有不同的使用场景。就像你不会用榔头去切菜,也不会用菜刀去钉钉子一样。

举个例子,你在必胜客点了一份披萨:

<>用async/await的情况:

//服务员接单后直接去忙别的了,披萨好了会通知你 awaitOrderPizzaAsync();

<>用Task.Run的情况:

//专门叫一个服务员站在厨房门口等披萨 Task.Run(()=>OrderPizza());

看出区别了吗?async/await就像是给披萨贴上了你的取餐号,你可以先去玩干别的;而Task.Run则是专门安排了一个人盯着你的披萨,VVVVVVIP级别的待遇,但这个服务员明显是浪费在这里了,纯纯摸鱼,那怎么能行!

来点专业的各自特点

<>async/await的特点

      不会占用额外的线程适合I/O作(数据库查询、文件读写、网络请求等)能最大化利用资源

<>Task.Run的特点

      会从线程池分配新线程适合CPU密集型作(大量计算、图像处理等)可能造成不必要的线程切换开销

就像在这样的使用场景下:

//推荐:处理WeAPI请求 pulicasyncTask<string>GetDataAsync() { retnawait.GetStringAsync("api/data"); } //推荐:处理大量计算 pulicTaskProcessigData() { retnTask.Run(()=>HeyCalculation()); }

<>但是也别这么整:

//反模式!不要这样做 pulicasyncTaskDoSomethingAsync() { awaitTask.Run(()=>File.ReadAllText("file.txt"));//错啦错啦 }

这就像点个外,非要雇个专车司机24小时待命一样,多此一举!

你就记住这句话:<>I/O作用async/await,CPU密集型作用Task.Run。能解决80%场景下的问题

如果觉得文章有帮助,记得点赞关注,我是旷野,探索无尽技术!

END

免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。

评论 打赏
卡卷网

卡卷网 主页 联系他吧

请记住:卡卷网 Www.Kajuan.Net

相关推荐

欢迎 发表评论:

请填写验证码