异步超时后直接返回
Posted 清风神剑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异步超时后直接返回相关的知识,希望对你有一定的参考价值。
应用场景
异步同时请求多个地址,获得返回的信息并输出,排除时间响应太久的以免造成不必要的时间等待。
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 TaskTest(); 6 Console.ReadLine(); 7 } 8 9 static async void ddd() 10 { 11 Stopwatch sw = new Stopwatch(); 12 sw.Start(); 13 List<string> urls = new List<string>() { "http://www.baidu.com", "http://www.360.com" }; 14 string a = await DownloadAllAsync(urls); 15 16 Console.WriteLine(a); 17 sw.Stop(); 18 Console.WriteLine(sw.ElapsedMilliseconds); 19 Console.ReadLine(); 20 } 21 static HttpClient httpClient = new HttpClient(); 22 static async Task<string> DownloadAllAsync(IEnumerable<string> urls) 23 { 24 25 var downloads = urls.Select(url => httpClient.GetStringAsync(url)); 26 Task<string>[] downloadTasks = downloads.ToArray(); 27 28 string[] pages = await Task.WhenAll(downloadTasks); 29 30 return string.Concat(pages); 31 } 32 33 static void TaskTest() 34 { 35 var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(2000)); 36 Task<string> t1 = GetString("http://www.baidu.com"); 37 Task<string> t2 = GetString("http://www.360.com"); 38 Task<string> t3 = GetString("http://www.github.com"); 39 40 Task<string>[] arr = new Task<string>[] { t1, t2, t3 }; 41 Task.WaitAll(arr,2000); 42 foreach (var dd in arr) 43 Console.WriteLine(dd.Result.ToString()); 44 } 45 46 static async Task<string> GetString(string str) 47 { 48 return await httpClient.GetStringAsync(str); 49 50 }
以上是关于异步超时后直接返回的主要内容,如果未能解决你的问题,请参考以下文章