「C Sharpの基礎 - マルチスレッド」の版間の差分

ナビゲーションに移動 検索に移動
23行目: 23行目:


== asyncとawaitの動作 ==
== asyncとawaitの動作 ==
Taskは、一連の処理をひとまとまりにした単位である。<br>
タスクとは、一連の処理をひとまとまりにした単位である。<br>
Taskを呼び出した際はマルチスレッドで実行されるようになっており、連続で記述する場合は、記述した個数だけマルチスレッドで並列処理される。<br>
<code>Task</code>クラスはマルチスレッドで実行されるようになっており、連続で記述する場合は、記述した個数だけマルチスレッドで並列処理される。<br>
  <syntaxhighlight lang="c#">
  <syntaxhighlight lang="c#">
  public async Task MethodAsync()
  public async Task MethodAsync()
46行目: 46行目:
   
   
     return await taskAll.ConfigureAwait(false);
     return await taskAll.ConfigureAwait(false);
}
</syntaxhighlight>
<br>
<code>Task.Run</code>メソッドには、引数を渡すオーバーロードが存在しない。<br>
引数を渡す場合、<code>Task</code>クラスのインスタンスの生成と同時に引数を渡して、<code>Task</code>クラスの<code>Start</code>メソッドを使用してスレッドを実行する必要がある。<br>
<syntaxhighlight lang="c"">
private async void MethodAsync()
{
    int m = 999;
    Task<int> task = new Task(x =>
    {
      Thread.Sleep(3000);
      return x * 2;
    }, m);
    task.Start();
    m = 100;
    int result = await task;  // result : 1998
    Console.WriteLine($"{result}");
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>

案内メニュー