【发布时间】:2016-01-10 13:05:00
【问题描述】:
当我们在代码中使用await 时,通常等待者捕获上下文并在等待的任务成功完成时将其用作回调。但是,由于await 通常是一个No-Op(无操作),它是否使底层线程在等待的任务执行完成之前不可重用?
例如:
public async Task MethodAAsync()
{
// Execute some logic
var test = await MethodB();
// Execute remaining logic
}
在这里,因为我需要返回结果才能继续进行,所以我需要等待。但是,由于我们正在等待,它是否会阻塞底层线程导致线程不被用于执行任何任务?
【问题讨论】:
-
我的理解是 Task 会作为 No.Op 继续执行,但是可以在底层线程中执行多个任务,因此不会被阻塞。
-
如果它确实阻塞了,这个功能有什么好处?这相当于调用 .Result。
标签: c# multithreading asynchronous async-await