12,925
回編集
124行目: | 124行目: | ||
<br><br> | <br><br> | ||
== | == WhenAllメソッド / ContinueWithメソッド == | ||
<code>Task</code>クラスは<code>ContinueWith</code>メソッドを使用して、その後の処理を連続して実行できる。<br> | |||
<br> | |||
例えば、2つ以上のタスクを実行して全てのタスクが完了した後に続けてタスクを実行する場合、<code>ContinueWith</code>メソッドまたは<code>await</code>を使用してタスクの完了を待つ。<br> | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
// パターン1 | // パターン1 | ||
172行目: | 172行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <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> | ||