C#.NET 4.5 でのタスクの並列処理について学習していますが、例について少し混乱しています。ここに私が理解できないコードがあります:
public static Task<string> DownloadStringAsync(string address)
{
// First try to retrieve the content from cache.
string content;
if (cachedDownloads.TryGetValue(address, out content))
{
return Task.FromResult<string>(content);
}
// If the result was not in the cache, download the
// string and add it to the cache.
return Task.Run(async () => // why create a new task here?
{
content = await new WebClient().DownloadStringTaskAsync(address);
cachedDownloads.TryAdd(address, content);
return content;
});
}
DownloadStringTaskAsync()
具体的には、別のタスクにラップしている理由がわかりません。DownloadStringTaskAsync()
独自のスレッドで既に実行されていませんか?
これが私がそれをコーディングした方法です:
public static async Task<string> DownloadStringAsync(string address)
{
// First try to retrieve the content from cache.
string content;
if (cachedDownloads.TryGetValue(address, out content))
{
return content;
}
// If the result was not in the cache, download the
// string and add it to the cache.
content = await new WebClient().DownloadStringTaskAsync(address);
cachedDownloads.TryAdd(address, content);
return content;
}
2つの違いは何ですか?どちらの方がよいですか?