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

ナビゲーションに移動 検索に移動
124行目: 124行目:
<br><br>
<br><br>


== Task.WhenAllとContinueWith ==
== WhenAllメソッド / ContinueWithメソッド ==
TaskはContinueWith関数を利用して、その後の処理を連続して実行できる。<br>
<code>Task</code>クラスは<code>ContinueWith</code>メソッドを使用して、その後の処理を連続して実行できる。<br>
2つ以上のスレッドを実行して全スレッドの処理が終了した後、続けてスレッドの処理を書く場合は、<br>
<br>
ContinueWithまたはawaitを使用してスレッドの終了を待つ。<br>
例えば、2つ以上のタスクを実行して全てのタスクが完了した後に続けてタスクを実行する場合、<code>ContinueWith</code>メソッドまたは<code>await</code>を使用してタスクの完了を待つ。<br>
  <syntaxhighlight lang="c#">
  <syntaxhighlight lang="c#">
  // パターン1
  // パターン1
172行目: 172行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
状況にもよるが、処理が膨大になると可読性が落ちるので、<br>
状況にもよるが、処理が膨大になると可読性が落ちるため、先にタスクをまとめて記述して、タスク間の関係性が見通せるパターン1の方が良い。<br>
先に関数で纏めて処理を記述して関数を呼ぶだけでタスク間の関係性が見通せるパターン1の方が良い。<br>
<br><br>
 
== IsCompletedプロパティ ==
タスクが完了しているかどうかを確認する場合、<code>IsCompleted</code>プロパティを使用する。<br>
<br>
<code>IsCompletedSuccessfully</code>プロパティもあるが、これはタスクが成功および完了した場合のみ<code>true</code>になる。<br>
また、<code>IsFaulted</code>プロパティや<code>IsCanceled</code>プロパティも存在する。<br>
<syntaxhighlight lang="c#">
HttpClient hc = new HttpClient();
Task<string> task = hc.GetStringAsync("https://www.microsoft.com/");
// タスクが成功および完了したかどうかを確認
if (!task.IsCompleted)
{
    // この時点でタスクt1が成功および完了している場合、このメッセージは表示されない
    Console.WriteLine("ちょっとまってね");
}
var html = await task;
Console.WriteLine(html);
</syntaxhighlight>
<br><br>
<br><br>


案内メニュー