7

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つの違いは何ですか?どちらの方がよいですか?

4

1 に答える 1