你的位置:首页 > ASP.net教程

[ASP.net教程]异步超时后直接返回


应用场景

     异步同时请求多个地址,获得返回的信息并输出,排除时间响应太久的以免造成不必要的时间等待。

   

 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     }

View Code

 

 

源码