await Task.Yield(); 超简单理解!

await Task.Yield();//1
var data = LoadData();//2
await Task.Run(() => Do(data));//3

上面的代码类似于:

Task.Run(() => { }).ContinueWith(t => Do(LoadData()));

意思就是: loadData 如果耗时较长那么上述代码会产生阻塞,为了LoadData不阻塞 特意加了 await Task.Yield();

意思就是: 先排个队。

再来看注释:Creates an awaitable task that asynchronously yields back to the current context when awaited.

创建一个异步的空任务,这个任务用于等待。

意思就是: 先创建一个空任务,然后用于等待,而等待后面的代码会编译成 后续任务 ,这样就把本来应该是主任务干的活放到了一个空任务 后续任务里。

这样主任务嘚儿...就完事了。



原文地址:https://www.cnblogs.com/zhuwansu/p/11230924.html

时间: 2024-08-30 15:16:02

await Task.Yield(); 超简单理解!的相关文章

【5min+】帮我排个队,谢谢。await Task.Yield()

系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等. 5min+不是超过5分钟的意思,"+"是知识的增加.so,它是让您花费5分钟以下的时间来提升您的知识储备量. 正文 如果您现在正在使用.NetCore的话,相信您对await 和 async这两个关键字再熟悉不过了.它们是为异步编程提供的语法糖,便于我们在代码中更便捷的进行异步

Thread.yield()的简单理解

Thread.yield( )方法: 使当前线程从执行状态(运行状态)变为可执行态(就绪状态).cpu会从众多的可执行态里选择. 也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次中不会执行到了. 示例如下: public class YieldTest implements Runnable{ @Override public void run() { for(int i=0;i<=10;i++) { System.out.println(

超简单理解分库分表

目录 一.为什么要做分库分表 二.如何进行数据分片 1.垂直切分 2.水平切分(重点) 三.数据切分后会出现的问题 数据源管理的问题 一.为什么要做分库分表 在数据爆炸的年代,单表数据达到千万级别,甚至过亿的量,都是很常见的情景.这时候再对数据库进行操作就是非常吃力的事情了,select个半天都出不来数据,这时候业务已经难以维系.不得已,分库分表提上日程,我们的目的很简单,减小数据库的压力,缩短表的操作时间. 二.如何进行数据分片 数据切分(Sharding),简单的来说,就是通过某种特定的条件

终于明白了 C# 中 Task.Yield 的用途

最近在阅读 .NET Threadpool starvation, and how queuing makes it worse 这篇博文时发现文中代码中的一种 Task 用法之前从未见过,在网上看了一些资料后也是云里雾里不知其解,很是困扰.今天在程序员节的大好日子里终于想通了,于是写下这篇随笔分享给大家,也过过专心写博客的瘾. 这种从未见过的用法就是下面代码中的 await Task.Yield() : static async Task Process() { await Task.Yiel

超简单的OpenGL &amp; WebGL &amp; Three.js介绍

专业解释 什么是OpenGL OpenGL(Open Graphics Library即开放图形库或者“开放式图形库”)是用于渲染2D.3D矢量图形的跨语言.跨平台的应用程序编程接口(API). 这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象. OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设计. 该API由Khronos集团定义推广(Khrono

ES7的Async/Await的简单理解

Async/Await 的个人见解 正文: async,顾名思义,一个异步执行的功能,而 await 则是配合 async 使用的另一个关键字,也是闻字识其意,就是叫你等待啦! 二者配合食用效果更佳哦,就像德芙配巧克力 ⊙_⊙|| 现在其实有点意识的前端或者JS学习者基本都学习了ES6语法了,但是依旧感觉在编写异步代码上不够爽怎么办,在 ES7 的 async/await 则能使得我们在编写异步代码时变得像同步一样的方式来编写,这样子可以帮助我们更直观的阅读我们的额代码而不必在一堆代码中去寻找这

Git超简单入门简明教程--写给一直不敢用Git的同学

从2014年2月12号开始工作到现在,已经快小半年了,还记得第一次接触集中式版本控制工具SVN时的惊喜,这对于之前一直独立开发的我来说,才明白原来代码还可以这样管理!当然,现在对于SVN的理解,也不过是知道运行原理,能满足工作里一些简单的代码版本控制罢了.对于Git这个版本控制工具,其实已经听说很长时间了,也明白Git与SVN的工作原理的区别,也一直想入门接触一下,但是苦于下载的一些教材太厚,内容太多,一直也没上手练.正好,这几天事件比较宽裕,于是又找来相关的资料,开始慢慢接触Git的使用,希望

[转]PHP实现页面静态化的超简单方法

为什么要页面静态化? 1.动态文件执行过程:语法分析-编译-运行 2.静态文件,不需要编译,减少了服务器脚本运行的时间,降低了服务器的响应时间,直接运行,响应速度快:如果页面中一些内容不经常改动,动态页面静态化是非常有效的加速方法.(纯静态,伪静态还是需要PHP解释器的) 3.生成静态URL利于SEO,利于蜘蛛抓取和收录,有利于提升排名 优化页面响应时间方法 1.动态页面静态化 2.优化数据库 3.负载均衡 4.使用缓存等等 //动态页面静态化一般用于不经常改动的地方,频繁改动的地方一般不适用静

Android将Library上传到jcenter超简单完整步骤以及遇到的各种坑

Android将Library上传到jcenter超简单完整步骤以及遇到的各种坑 在[玩转SQLite系列](七)打造轻量级ORM工具类SQLiteDbUtil操作数据库 中我们可以看到这个工具类的超简洁用法:只需要在gradle中引入: compile 'cn.bluemobi.dylan:sqlitelibrary:0.1' 即可使用,那么这到底是怎么回事?这个是Android项目所在jcenter的一个远程仓库.我们只需要将你的libray上传到jcenter即可,那么如和将一个项目上传到