0

asyncandを使用して非同期にしたコードを実行するとawait、コードの一部が実行されないことがあります。たとえば、次のコードでは、「Sleeping2」はコンソール画面に表示されません。

public static void Sleeping(int millis)
{
    System.Console.WriteLine("Sleeping1");
    System.Threading.Thread.Sleep(millis);
    System.Console.WriteLine("Sleeping2");
}

public static async void SleepingAsync(int millis)
{
    await System.Threading.Tasks.Task.Run(() => Sleeping(millis));
}

public static async void DoSleepingMain()
{
    System.Console.WriteLine("DoSleepingMain1");
    SleepingAsync(12000);
    System.Console.WriteLine("DoSleepingMain2");
}

public static void Main(string[] args)
{
    DoSleepingMain();
}

もう 1 つの例は、Sleeping1 も Sleeping2 も表示されていない次の例です。awaitメソッドの Task であるため、これを理解できませんDoSleepingMain

public static void Sleeping(int millis)
{
    System.Console.WriteLine("Sleeping1");
    System.Threading.Thread.Sleep(millis);
    System.Console.WriteLine("Sleeping2");
}

public static async Task SleepingAsync(int millis)
{
    System.Threading.Tasks.Task.Run(() => Sleeping(millis)); //warning: call not awaited
}

public static async void DoSleepingMain()
{
    System.Console.WriteLine("DoSleepingMain1");
    await SleepingAsync(12000);
    System.Console.WriteLine("DoSleepingMain2");
}

public static void Main(string[] args)
{
    DoSleepingMain();
}

説明(または説明へのポインタ)をいただければ幸いです。ありがとう

4

1 に答える 1