public async Task A()
{
Console.WriteLine($"{DateTime.Now.ToLongTimeString()}方法A处理返回值前的代码,线程ID是{Thread.CurrentThread.ManagedThreadId}");
string str = await B();/*这里要想得到异步方法B中的返回结果,必须要用await来等待方法B执行完成,await这一行后面的代码也得等方法B执行完成
* 返回结果后再执行。所以await这一行后面只需要写处理方法B返回值的代码,其它代码写到await前面。*/
Console.WriteLine(str);//输入方法B的返回值
Console.WriteLine($"{DateTime.Now.ToLongTimeString()}方法A处理返回值后的代码,线程ID是{Thread.CurrentThread.ManagedThreadId}");
//Thread.CurrentThread.ManagedThreadId获取当前托管线程的唯一标识符
}
public async Task<string> B()
{
Console.WriteLine($"{DateTime.Now.ToLongTimeString()}方法B调用Task之前,线程ID是{Thread.CurrentThread.ManagedThreadId}");
Task<string> t = Task.Run(C);//创建一个任务,把方法C放进去
string str = await t;//运行这个任务,开始执行方法C中的代码,在方法B中会等待方法C中的代码执行完成后 再执行awaitj剩下的代码
Console.WriteLine($"{DateTime.Now.ToLongTimeString()}方法B调用Task之后,线程ID是{Thread.CurrentThread.ManagedThreadId}");
return str;
}
public string C()
{
Task.Delay(5000).Wait();//延迟5秒,模拟耗时操作
Console.WriteLine($"{DateTime.Now.ToLongTimeString()}方法C处理完成,线程ID是{Thread.CurrentThread.ManagedThreadId}");
return $"{DateTime.Now.ToLongTimeString()}这是方法C返回的值,线程ID是{Thread.CurrentThread.ManagedThreadId}";
}
输出结果: