async Task MethodAsync()
{
// поток 1
await Task.Delay(); // что там внутри - не важно, главное чтобы оно не завершиось синхронно
// и здесь тоже поток 1
}
如果您从默认情况下没有同步上下文的控制台应用程序运行此代码,那么画面会有所不同
async Task MethodAsync()
{
// поток 1
await Task.Delay();
// а здесь уже поток 2
}
异步操作可能需要 0 到任意数量的线程才能完成。例如,对磁盘的异步请求需要等待,但代码并没有在处理器线程中执行,因为工作是由硬件磁盘控制器执行的。
所以你的问题不清楚,但我会试着解释一下。
我将采用抽象术语“异步单线程”,并认为这是对操作调用之间的方法的异步代码是否可以继续在启动方法执行的同一线程上执行的问题的上诉 -答案是:可以。这将需要一个单线程同步上下文。这样的上下文可以在 Winforms 或 WPF 等 UI 应用程序中找到。最初在应用程序中执行的所有代码都在一个初始线程上运行,即 UI 线程。UI 同步上下文附加到此线程以管理异步代码,这意味着默认情况下上下文处于活动状态。
如果您从默认情况下没有同步上下文的控制台应用程序运行此代码,那么画面会有所不同
我在这里玩了单线程同步上下文本身的机制。
至于同步等待,这是您简单地阻塞当前线程,直到另一个线程中的操作完成。
您不能同步等待几个同步操作的完成,但您可以异步等待。例如,异步允许运行 5 个操作并在它们到达时处理它们的结果,而不是按照它们被调用的顺序。同步,这样的芯片在前额中不可用,您将不得不编写各种带有某种回调的补偿带,这在逻辑上看起来像异步,只是在您自己的拐杖上。:)