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