C#异步编程(一):异步基础

class Program
    {
        static void Main(string[] args)
        {
            var result = DownloadStringWithTimeout("http://www.yueyangdujia.com");
            Console.WriteLine("异步方法执行中");
            for (int i = 0; i < 3; i++)
            {
                System.Threading.Thread.Sleep(1000);
                Console.WriteLine("休息了"+(i+1)+"");
            }     
            var str= result.Result;   //这里使用到异步方法的返回值,需要等待异步方法执行完毕。         
            Console.WriteLine("异步方法执行后,同步执行以下代码");
            Console.WriteLine(str);
            Console.Read();
        }

        static async Task<string> DownloadStringWithTimeout(string uri)
        {
            using (var client=new HttpClient())
            {
                var downloadTask = client.GetStringAsync(uri);
                var timeoutTask = Task.Delay(3000);

                var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
                if (completedTask == timeoutTask)
                {
                    System.Threading.Thread.Sleep(2000);
                    Console.WriteLine("异步方法执行完成");
                    return null;
                }
                System.Threading.Thread.Sleep(2000);
                Console.WriteLine("异步方法执行完成");
                return await downloadTask;
            }
            
        }
    }

执行顺序如 Console.WriteLine显示一样。DownloadStringWithTimeout和下面的代码一起执行,大概在2秒的时候执行完毕。var str= result.Result;调用异步方法返回值的时候会等候异步方法执行。




下来去掉一些代码如下:
    class Program
    {
        static void Main(string[] args)
        {
            var result = DownloadStringWithTimeout("http://www.yueyangdujia.com");         
            var str= result.Result;   //这里使用到异步方法的返回值,需要等待异步方法执行完毕。                   
            Console.WriteLine(str);
            Console.Read();
        }

        static async Task<string> DownloadStringWithTimeout(string uri)
        {
            using (var client=new HttpClient())
            {
                var downloadTask = client.GetStringAsync(uri);
                var timeoutTask = Task.Delay(3000);
                var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
                if (completedTask == timeoutTask)
                {
                
                    return null;
                }
                return await downloadTask;
            }
            
        }
    }

WhenAny接受两个异步方法参数返回先执行完成的方法。以上可以调整Task.Delay的参数。如果足够小则返回NULL。

还有一个WhenAll方法会等所有方法都执行完毕后再一起返回,代码如下。

   static async Task<string> Down()
        {
            Task<string> tast1 = DownloadStringWithTimeout("http://www.yueyangdujia.com");
            Task<string> tast2 = DownloadStringWithTimeout("http://www.yueyangdujia.com");
            Task<string> tast3 = DownloadStringWithTimeout("http://www.yueyangdujia.com");
            string[] arr = await Task.WhenAll(tast3, tast2, tast1);
            return String.Concat(arr);
        } 

 

 

转载于:https://www.cnblogs.com/harpz/p/4904742.html

基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip 【备注】 1、该资源内项目代码百分百可运行,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值