using System;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Http;
using System.Collections.Generic;
using System.Linq;
namespace async_WhenAny
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private async void button1_Click(object sender, EventArgs e)
{
List<string> Urls = new List<string>();
Urls.Add("http://www.baidu.com");
Urls.Add("http://www.sohu.com/");
string a = await DownloadAllAsync(Urls);
label1.Text = a;
}
static async Task<string> DownloadAllAsync(List<string> urls)
{
using (var httpClient = new HttpClient())
{
// 定义每一个url 的使用方法。
var downloads = urls.Select(url => httpClient.GetStringAsync(url));
// 注意,到这里,序列还没有求值,所以所有任务都还没真正启动。
// 下面,所有的URL 下载同步开始。
Task<string>[] downloadTasks = downloads.ToArray();
// 到这里,所有的任务已经开始执行了。
// 用异步方式等待所有下载完成。
string[] htmlPages = await TaskEx.WhenAll(downloadTasks);
return string.Concat(htmlPages);
}
}
}
}
参考书籍: C#并发编程实例