假设我有这个代码:
public void AAA()
{
BBB();
}
public async Task BBB()
{
await Task.Delay(10000);
}
IMHO,在正常模式下,方法AAA
也应该是async
,这样主线程将在不等待的情况下继续其作业。
但关于这种情况,我有两个问题:
上面的代码确实将线程绑定了10秒,这正确吗?(我怀疑答案是肯定的,因为AAA不是异步的,所以没有注册继续)
如果是,我如何通过代码来证明它?
上面的代码确实将线程绑定了10秒,这正确吗?
没有。
AAA
调用BBB
,后者设置一个Task并立即返回。由于AAA
在BBB
上没有await
,因此它也会立即返回。因此,"你自己"的思路并没有被束缚住。
Task.Delay
的"实现"本身使用了定时器,而不是阻塞线程,因此在任务的持续时间内,任何线程池线程都不会被占用。