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程序中中断大量工作,而让其他任务使用处理器。

  • 相关阅读:
    再谈树形dp
    洛谷 P3627 [APIO2009]抢掠计划
    树状数组
    树形dp 入门
    洛谷P2014 选课
    洛谷P2015 二叉苹果树
    9 vue.js 被观察数组的变异方法
    8 vue的v-model指令学习
    7vue-事件修饰符
    6.vue事件绑定-click
  • 原文地址:https://www.cnblogs.com/NicolasLiaoran/p/12954865.html
Copyright © 2011-2022 走看看