【发布时间】:2017-04-19 14:17:48
【问题描述】:
- 当我调用 test1() 方法时,ManagedThreadId 将在之后更改 延迟(1)。
- 当我调用 test2() 方法(而不是 test1())然后调用 ManagedThreadId 将保持不变。
async-await什么时候换线程?
在 test2() 方法中,完成方法所需的时间甚至比在 test1() 中更长
[Route("api/[controller]")]
[HttpGet]
public async Task<IActionResult> Get()
{
await MainAsync();
return new ObjectResult(null);
}
static async Task MainAsync()
{
Console.WriteLine("Main Async: " + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString());
await test1();
//await test2();
// . . .more code
}
private static async Task test1()
{
Console.WriteLine("thisIsAsyncStart: " + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString());
await Task.Delay(1);
Console.WriteLine("thisIsAsyncEnd: " + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString());
}
private static async Task test2()
{
Console.WriteLine("thisIsAsyncStart: " + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString());
System.Threading.Thread.Sleep(5000);
await Task.FromResult(0);
Console.WriteLine("thisIsAsyncEnd: " + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString());
}
【问题讨论】:
-
我建议你阅读How different is await/async from threading?的答案...
-
我有一个async intro 可以帮助你。
-
假设您将一只鸡放入烤箱中烤,然后在等待时支付一些账单。 什么时候把鸡放进烤箱让你雇了一个秘书来付账单?它没有。异步与多个工作线程无关。这是关于将任务分解成更小的部分,以便您可以及时重新排序。
标签: c# async-await