我正在努力理解async
/await
,想知道是否正确使用了Task.WhenAll
方法:
public class AsyncLib
{
public async Task<IEnumerable<string>> DoIt()
{
var urls = new string[] { "http://www.msn.com", "http://www.google.com" };
var tasks = urls.Select(x => this.GetUrlContents(x));
var results = await Task.WhenAll(tasks);
return results.Select(x => x);
}
public async Task<string> GetUrlContents(string url)
{
using (var client = new WebClient())
{
return await client.DownloadStringTaskAsync(url);
}
}
}
主要
这是调用控制台应用程序。
class Program
{
static void Main(string[] args)
{
var lib = new AsyncLib();
foreach(var item in lib.DoIt().Result)
{
Console.WriteLine(item.Length);
}
Console.Read();
}
}
WhenAll
是我知道的通常做法。 - Simon WhiteheadTask.WhenAll
的返回类型是实现了IEnumerable<T>
的string[]
。results.Select(x => x)
什么也没做,只是增加了开销。这与async-await
无关,它只是基本的LINQ
和类型系统意识。 - Paulo MorgadoDoItAsync
。 - Paulo Morgado