zoukankan      html  css  js  c++  java
  • 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程序中中断大量工作,而让其他任务使用处理器。

  • 相关阅读:
    349. Intersection of Two Arrays
    346. Moving Average from Data Stream
    345. Reverse Vowels of a String
    344. Reverse String
    342. Power of Four
    POJ2823 Sliding Window
    《STL源码剖析》笔记
    [jobdu]扑克牌顺子
    [jobdu]第一个只出现一次的字符
    [jobdu]包含min函数的栈
  • 原文地址:https://www.cnblogs.com/NicolasLiaoran/p/12954865.html
Copyright © 2011-2022 走看看