http://msdn.microsoft.com/en-US/library/vstudio/hh191443.aspxを読んでいました。コード例:
async Task<int> AccessTheWebAsync()
{
// You need to add a reference to System.Net.Http to declare client.
HttpClient client = new HttpClient();
// GetStringAsync returns a Task<string>. That means that when you await the
// task you'll get a string (urlContents).
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
// You can do work here that doesn't rely on the string from GetStringAsync.
DoIndependentWork();
// The await operator suspends AccessTheWebAsync.
// - AccessTheWebAsync can't continue until getStringTask is complete.
// - Meanwhile, control returns to the caller of AccessTheWebAsync.
// - Control resumes here when getStringTask is complete.
// - The await operator then retrieves the string result from getStringTask.
string urlContents = await getStringTask;
// The return statement specifies an integer result.
// Any methods that are awaiting AccessTheWebAsync retrieve the length value.
return urlContents.Length;
}
このページには次のようにも書かれています。
async および await キーワードによって、追加のスレッドが作成されることはありません。非同期メソッドは独自のスレッドで実行されないため、非同期メソッドはマルチスレッドを必要としません。
この「追加のスレッドは作成されません」は、非同期としてマークされたメソッドの範囲内に適用されますか?
GetStringAsync と AccessTheWebAsync の両方を同時に実行するには (そうしないと、AccessTheWebAsync が制御できるようになったため GetStringAsync は終了しません)、最終的に GetStringAsync は AccessTheWebAsync のスレッドとは別のスレッドで実行する必要があると思います。
私にとって、非同期メソッドを書くことは、それが待機しているメソッドも非同期である場合にスレッドを追加しない場合にのみ役立ちます(すでに余分なスレッドを使用して独自のことを並行して実行しています)
私の理解は正しいですか?