using System;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("hhh");
Task3().Wait();
task1();
}
private static Task task1()
{
return Task.Run(() =>
{
for (int i = 0; i < 30; i++)
{
Console.WriteLine("task1");
}
});
}
private static async Task<int> Task2(string s)
{
return await Task.Run(() =>
{
for (int i = 0; i < 12; i++)
{
Console.WriteLine(s);
}
return 222222;
});
}
private static async Task<int> Task3()
{
return await Task.Run(async () =>
{
var i = Task.Run(() =>
{
for (int i = 0; i < 12; i++)
{
Console.WriteLine("111111111111");
}
});
var i2 = Task.Run(() =>
{
for (int i = 0; i < 12; i++)
{
Console.WriteLine("222222222222");
}
});
Task<int> i3 = Task.Run(() =>
{
for (int i = 0; i < 12; i++)
{
Console.WriteLine("33333333333");
}
return 3;
});
var r = await i3;
Console.WriteLine("task3");
return 5;
});
}
}
}
复制上面的代码运行,观察结果:
1.如果注释掉“var r = await i3;”,“task3"就有可能出现在"33333333333"的前面;
2.不注释掉就一直在"33333333333"的后面;
3."task1"只会在最后出现。
结论:await和Wait()效果一样,但是前者是异步阻塞,后者是同步阻塞。