Task.Yield

该代码示例展示了在C#中使用Task.Yield()如何改变代码执行的线程上下文。当调用Task.Yield()时,后续代码会在新的异步线程中运行,而取消注释则会保持在同一线程中。这突显了异步编程中控制线程切换的重要性。
摘要由CSDN通过智能技术生成
        static void Main(string[] args)
        {
            Task.Run(() => RunAsync());
            Console.ReadLine();
        }

        static async Task RunAsync()
        {
            Console.WriteLine("RunAsync方法前" + System.Threading.Thread.CurrentThread.ManagedThreadId);
            Task<Task> task = null;
            task = getOwnTaskAsync();
            var foundTask = await task;
            Console.WriteLine("RunAsync方法后" +  System.Threading.Thread.CurrentThread.ManagedThreadId);

            async Task<Task> getOwnTaskAsync()
            {
                Console.WriteLine("前" + System.Threading.Thread.CurrentThread.ManagedThreadId);
                await Task.Yield();
                Console.WriteLine("后" + System.Threading.Thread.CurrentThread.ManagedThreadId);

                return task;
            }
        }

在这里插入图片描述
此时getOwnTaskAsync方法中,Task.Yield()后面的代码将在一个新的异步线程中执行。如果注释掉Task.Yield(),则Task.Yield()后面的代码在相同中线程中执行。

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

        static async Task RunAsync()
        {
            Console.WriteLine("RunAsync方法前" + System.Threading.Thread.CurrentThread.ManagedThreadId);
            Task<Task> task = null;
            task = getOwnTaskAsync();
            var foundTask = await task;
            Console.WriteLine("RunAsync方法后" +  System.Threading.Thread.CurrentThread.ManagedThreadId);

            async Task<Task> getOwnTaskAsync()
            {
                Console.WriteLine("前" + System.Threading.Thread.CurrentThread.ManagedThreadId);
                //await Task.Yield();
                Console.WriteLine("后" + System.Threading.Thread.CurrentThread.ManagedThreadId);

                return task;
            }
        }

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值