using System;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Http;
namespace async_WhenAny
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private async void button1_Click(object sender, EventArgs e)
{
int a = await FirstRespondingUrlAsync("http://www.baidu.com", "http://www.souhu.com");
label1.Text = a.ToString();
}
private async Task<int> FirstRespondingUrlAsync(string urlA, string urlB)
{
using (var httpClient = new HttpClient())
{
// 并发地开始两个下载任务。
Task<byte[]> downloadTaskA = httpClient.GetByteArrayAsync(urlA);
Task<byte[]> downloadTaskB = httpClient.GetByteArrayAsync(urlB);
// 等待任意一个任务完成。
Task<byte[]> completedTask =
await TaskEx.WhenAny(downloadTaskA, downloadTaskB);
// 返回从URL 得到的数据的长度。
byte[] data = await completedTask;
return data.Length;
}
}
}
}
参考书籍: C#并发编程经典实例