async修饰的异步方法一共有三种返回类型,分别是:
fun1返回一个返回值为string的Task,Fun3返回一个返回值为int的Task。
主程序中调用Fun2和Fun3
Fun2调用Fun1,在Fun2中,ret需等待Fun1的返回值,所以主线程在此处阻塞。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("主线程ID" + Thread.CurrentThread.ManagedThreadId);
Fun2();
Fun3();
Fun4();
Console.ReadKey();
}
static async void Fun4()
{
Console.WriteLine("fun4");
}
static async Task<string> Fun1()
{
Console.WriteLine("fun1开始执行--");
return await Task.Run(() =>
{
Console.WriteLine("fun1 ID" + Thread.CurrentThread.ManagedThreadId);
for (int i = 0; i < 5; i++)
{
Console.WriteLine("fun1挂起--");
Thread.Sleep(1000);
}
return "fun1";
});
}
static async Task Fun2()
{
Console.WriteLine("fun2开始执行--");
string ret = await Fun1();
Console.WriteLine($"fun2");
Console.WriteLine($"fun2执行结束-- ret = {ret}");
}
static async Task<int> Fun3()
{
return await Task<int>.Run(() =>
{
Console.WriteLine("fun3开始执行--");
Console.WriteLine("fun3线程ID" + Thread.CurrentThread.ManagedThreadId);
for (int i = 0; i < 5; i++)
{
Console.WriteLine("fun3挂起--");
Thread.Sleep(1000);
}
Console.WriteLine("fun3");
return 0;
});
}
}