static async Task Main(string[] args)
{
TestMethod();
Console.WriteLine("main" + Thread.CurrentThread.ManagedThreadId);
Console.Read();
}
static async Task TestMethod()
{
Console.WriteLine("TestMethod beging" + Thread.CurrentThread.ManagedThreadId);
d1();
Console.WriteLine("TestMethod running" + Thread.CurrentThread.ManagedThreadId);
await d2();
}
static async Task d1()
{
Task.Run(()=> {
Console.WriteLine("d1 beging" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
Console.WriteLine("d1 end" + Thread.CurrentThread.ManagedThreadId);
});
static async Task<int> d2()
{
Task.Run(()=> {
Console.WriteLine("d2 beging" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
Console.WriteLine("d2 end" + Thread.CurrentThread.ManagedThreadId);
});
return 2;
}
执行顺序:
TestMethod方法里面调用d1方法,d1另外开启一个线程运行,程序执行到d1里面的run会在线程池中申请线程执行,这里直接调用线程执行返回继续执行。这里先执行d1 beging还是先执行main 不确定。
static async Task Main(string[] args)
{
TestMethod();
Console.WriteLine("main" + Thread.CurrentThread.ManagedThreadId);
Console.Read();
}
static async Task TestMethod()
{
Console.WriteLine("TestMethod beging" + Thread.CurrentThread.ManagedThreadId);
await d1();
Console.WriteLine("TestMethod running" + Thread.CurrentThread.ManagedThreadId);
await d2();
}
static async Task d1()
{
//Thread.Sleep(1);
Console.WriteLine("d1 beging" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
Console.WriteLine("d1 end" + Thread.CurrentThread.ManagedThreadId);
}
static async Task<int> d2()
{
Console.WriteLine("d2 beging" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
Console.WriteLine("d2 end" + Thread.CurrentThread.ManagedThreadId);
return 2;
}
TestMethod 调用 await d1,await d2 异步调用时候,d1,d2两个方法都没有加Task.run另外开启线程运行,则还是在同一个线程中执行,执行的线程都是调用线程1。await d1,await d2异步等待Task任务完成后再继续执行后面的代码。
static async Task Main(string[] args)
{
TestMethod();
Console.WriteLine("main" + Thread.CurrentThread.ManagedThreadId);
Console.Read();
}
static async Task TestMethod()
{
Console.WriteLine("TestMethod beging" + Thread.CurrentThread.ManagedThreadId);
await d1();
Console.WriteLine("TestMethod running" + Thread.CurrentThread.ManagedThreadId);
await d2();
}
static async Task d1()
{
await Task.Run(() =>
{
//Thread.Sleep(1);
Console.WriteLine("d1 beging" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
Console.WriteLine("d1 end" + Thread.CurrentThread.ManagedThreadId);
});
}
static async Task<int> d2()
{
await Task.Run(() =>
{
Console.WriteLine("d2 beging" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
Console.WriteLine("d2 end" + Thread.CurrentThread.ManagedThreadId);
});
return 2;
}