C#并发编程 whenAny()

本文通过一个具体的示例展示了如何使用C#进行异步编程。具体来说,该示例实现了同时请求两个URL并等待最先响应的那个完成,然后显示响应内容的长度。此过程利用了`Task.WhenAny`来优雅地处理并发请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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#并发编程经典实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值