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

(Wiki がページ「マルチスレッドの使用方法(C Sharp)」を「C Sharpの基礎 - マルチスレッド」に、リダイレクトを残さずに移動しました)
47行目: 47行目:
     return await taskAll.ConfigureAwait(false);
     return await taskAll.ConfigureAwait(false);
  }
  }
</syntaxhighlight>
<br><br>
== Wait / Result ==
コンソールソフトウェアにおいて、<code>Wait</code>メソッドおよび<code>Result</code>メソッドを使用して、非同期メソッドを作成することができる。<br>
<syntaxhighlight lang="c#">
HttpClient hc = new HttpClient();
string html = hc.GetStringAsync("http://example.jp/").Result;
</syntaxhighlight>
<br>
また、<code>Wait</code>メソッドおよび<code>Result</code>メソッド以外に、<code>WaitAll</code>メソッドや<code>WaitAny</code>メソッドが存在する。<br>
<syntaxhighlight lang="c#">
HttpClient hc = new HttpClient();
Task<string> t1 = hc.GetStringAsync("https://www.microsoft.com/");
Task<string> t2 = hc.GetStringAsync("https://www.bing.com/");
// タスクが終わるまでスレッドをブロック
t1.Wait();
// タスクが終わるまでスレッドをブロックして結果を取得
string binghtml = t2.Result;
// どれかのタスクが終わるまでスレッドをブロック
int completedTaskIndex = Task.WaitAny(t1, t2);
// 0 : タスクt1の方が速い場合
// 1 : タスクt2の方が速い場合
// どれかのタスクが終わるまでスレッドをブロック(タイムアウトあり)
int completedTaskIndex2 = Task.WaitAny(new[] { t1, t2 }, 50);
// 0  : タスクt1の方が速い場合
// 1  : タスクt2の方が速い場合
// -1 : タスクt1およびt2とも50[ms]以内に応答がない場合
// 全てタスクが終わるまでスレッドをブロック
Task.WaitAll(t1, t2);
// 全てのタスクが終わるまでスレッドをブロック(タイムアウトあり)
bool allTasksCompleted = Task.WaitAll(new[] { t1, t2 }, 50);
// true  : タスクt1およびt2とも50[ms]以内に応答がある場合
// false : タスクt1またはt2のいずれか一方、または、タスクt1およびt2とも50[ms]以内に応答がない場合
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>