私はこのようなコンソールアプリケーションをテストした:C#Async/Awaitは割り込みのように動作しますか?
class Program
{
static void Main(string[] args)
{
Test();
Console.WriteLine("C");
Console.ReadLine();
}
static async void Test()
{
Console.WriteLine("A");
await Task.Delay(2000);
Console.WriteLine("B");
}
}
このアプリケーションは、2秒後immmediately次いで、A及びC Bを印刷しました。それはうまく見えます。しかし、私はasync/awaitに関する記事を読んでいます。「スレッドがありません」(http://blog.stephencleary.com/2013/11/there-is-no-thread.html)、async/awaitは追加のスレッドを作成しません。
私のコンソールアプリケーションに戻って、メインスレッドはConsole.ReadLine()にblokcedされているので、Test()(Console.WriteLine( "B"))の残りのコードはConsoleまで実行されません。 ReadLine()が完了しました。しかし実際の結果は異なりますが、残りのコードはメインスレッドのブロックに関係なく実行されます。 (Console.ReadLine(););(Console.WriteLineを(「B」))と中断位置に戻って移動し
は私が命令ポインタが残っているコードに移動させ、CPUの割り込みのような作品を待つことを知りたいです実行後?
async/awaitは非同期作業の抽象です。いくつかのケースでは、実装はCPUインターアクトに基づいており、場合によってはEPOLLに基づいている場合もあり、スレッド同期プリミティブに基づく場合もあります。 – Aron
@KichangKim:[スレッドがありません](http://blog.stephencleary.com/2013/11/there-is-no-thread.html)では、asyncがスレッドを使用しない*方法について説明しています。 I/O操作では一般にスレッドをブロックしません。しかし、非同期メソッド*が*続く場合、どこかで実行する必要があります。私は私の[async intro post](http://blog.stephencleary.com/2012/02/async-and-await.html)でこの動作を説明しています。 –