C#中的异步多线程8 Task.Yield

Task.Yield方法创建一个立即返回的awaitable。等待一个yield可以让人异步方法在执行后续部分的同时返回到调用方法。相当于离开当前的消息队列,回到队列末尾,让处理器有时间处理其他任务。

    static class DoStuff
    {
        public static async Task<int> FindSeriesSum(int i1)
        {
            int sum = 0;
            for(int i=0;i<i1;i++)
            {
                sum += i;
                if (i % 1000 == 0)
                    await Task.Yield();//每执行1000次就会移交一次控制器到调用方法
            }
            return sum;
        }
    }
    class Program
    {
        
        static void Main(string[] args)
        {
            Task<int> value = DoStuff.FindSeriesSum(1000000);
            CountBig(100000);
            CountBig(100000);
            CountBig(100000);
            CountBig(100000);
            Console.WriteLine("Sum:{0}", value.Result);
            Console.ReadLine();
        }
        private static void CountBig(int p)
        {
            for (int i = 0; i < p; i++) ;
        }
    }

Sum:1783293664

程序每执行某个循环1000次就移交一次控制权。每次执行yield方法,都会允许线程中的其他任务得以执行。yield方法用于在GUI程序中中断大量工作,而让其他任务使用处理器。

原文地址:https://www.cnblogs.com/NicolasLiaoran/p/12954865.html