using System;
using System.Threading.Tasks;
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 % 50 == 0 )
await Task.Yield();//每隔50次,移交一次控制器,让处理器处理其他任务
}
return sum;
}
}
class Program
{
static void Main()
{
//调用异步方法
Task<int> value = DoStuff.FindSeriesSum( 1000000 );
Console.WriteLine( "Sum: 0");
CountBig( 10 );
CountBig( 10);
CountBig1( 10 );
CountBig1( 10);
//value.Result 就是方法FindSeriesSum 返回的sum值
Console.WriteLine( "Sum: {0}", value.Result );//等待FindSeriesSum方法,返回sum的值
Console.Read();
}
private static void CountBig( int p )
{
for ( int i=0; i < p; i++ )
Console.WriteLine( "Sum: 1");
}
private static void CountBig1( int p )
{
for ( int i=0; i < p; i++ )
Console.WriteLine( "Sum: 2");
}
}
控制台显示:
当i=0的时候,会移交一次控制权,让处理器处理主程序中的后续代码,从而打印出了20个Sum:1 和 20个Sum:2
当i=50或者50的倍数时,仍然会移交控制权,但是主程序的后续代码是 Console.WriteLine( "Sum: {0}", value.Result );其需要等待FindSeriesSum方法,返回sum的值。所以,就一直等到i=1000000的时候,才会输出Sum: 1783293664这句话,到控制台。