Task.Yield()

关于Task.Yield(),

msdn的解释:可以 await Task.Yield(); 在异步方法中使用来强制异步完成方法。 如果当前同步上下文 (SynchronizationContext 对象) ,则这会将该方法的其余执行内容发布回该上下文。 但是,上下文将决定如何将此工作的优先级设置为相对于可能挂起的其他工作。 大多数 UI 环境中的 UI 线程上出现的同步上下文通常会将发布到上下文的工作的优先级设置为高于输入和呈现工作的优先级。 出于此原因,请不要依赖 await Task.Yield(); 于保持 UI 的响应能力。 有关详细信息,请参阅通过 .NET 并行编程中的 System.threading.tasks.task.continuewith 启用的有用抽象 博客。

关键就是红色标注。

 

这里举个例子:

来自:https://stackoverflow.com/questions/20319769/await-task-yield-and-its-alternatives

static void Main(string[] args) 
        {
            Task.Run( () => RunAsync());
            Console.ReadLine();
        }

        static async Task RunAsync()
        {
            Task<Task> task = null;
            task = getOwnTaskAsync();
            var foundTask = await task;
            Console.WriteLine($"{task?.Id} == {foundTask?.Id}: {task == foundTask}");

            async Task<Task> getOwnTaskAsync()
            {
                // Cause this method to return and let the 「task」 local be assigned.
                await Task.Yield();
                return task;
            }
        }

如果注释await Task.Yield();

结果如下:False

反之:True

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值