目的:了解异步方法async、await的写法和执行步骤
一、执行代码如下
class Program
{
static void Main(string[] args)
{
// Do:开始主线程
Debug.WriteLine("Step 1");
// Do:调用异步方法
Task t = BeginRead();
// Do:注册异步方法返回时触发的方法
t.ContinueWith(l => Debug.WriteLine("Step 4"));
// Do:执行主线程
while (true)
{
Debug.WriteLine("Working");
Thread.Sleep(1000);
}
}
static async Task BeginRead()
{
Thread.Sleep(3000);
Debug.WriteLine("Step 2");
// Do:使用await等待一个线程(在此过程中,返回到了主线程中,但没有触发Task.Continue方法)
await Task.Run(()=>
{
int count = 3;
while (count>0)
{
Thread.Sleep(3000);
Debug.WriteLine("await...");
count--;
}
});
// Do:当await执行完后才继续执行下面方法
Thread.Sleep(3000);
Debug.WriteLine("Step 3");
}
}
二、输入结果如下:
Step 1
Step 2
Working
Working
Working
await...
Working
Working
Working
await...
Working
Working
Working
await...
Working
Working
Working
Step 3
Step 4
Working
Working
Working
三、执行过程说明
1、由输出结果可见执行的步骤是按照Step严格执行的
2、调用await前的语句执行的是在上一个线程中执行,在await后面中执行的则是在新线程中执行的,即Step2虽然在async方法中,但是是在主线程中执行,await后面的则会异步执行;
3、值得注意的是异步方法返回的Task.ContinueWith任务则是在await后面所有代码都执行完才执行
4、如果async中没有加await会出现async中所有步骤都是在主线程中执行