使用async 和 await方法來

來源:互聯網
上載者:User

標籤:console   extra   沒有   .com   相對   namespace   image   cti   http   

先看直接的代碼請求方式地啊;

這裡是我們同步方法的實現:

using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Net;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication3{    class Program    {        private static readonly Stopwatch Watch = new Stopwatch();        static void Main(string[] args)        {            Watch.Start();            const string url1 = "http://www.cnblogs.com/";            const string url2 = "http://www.cnblogs.com/liqingwen/";            var result1 = CountCharacters(1, url1);            var result2 = CountCharacters(2, url2);            // 三次調用 ExtraOperation 方法(主要是通過拼接字串達到耗時操作)            for (var i = 0; i < 3; i++)            {                ExtraOperation(i + 1);  //類比主線程執行一些耗時的各種操作地啊;            }            //控制台輸出            Console.WriteLine($"{url1} 的字元個數:{result1}");            Console.WriteLine($"{url2} 的字元個數:{result2}");            Console.WriteLine($"總共耗時: {Watch.ElapsedMilliseconds} ms");            Console.ReadLine();        }        private static int CountCharacters(int id,string address)        {            var client = new WebClient();            Console.WriteLine($"開始調用 id={id} : {Watch.ElapsedMilliseconds} ms");            var result = client.DownloadString(address);            Console.WriteLine($"調用完成 id={id} : {Watch.ElapsedMilliseconds} ms");            return result.Length;        }        private static void ExtraOperation(int id)        {            //這裡是通過拼接字串進行一些相對耗時的操作            var s = "";            for (var i = 0; i < 6000; i++)            {                s += i;            }            Console.WriteLine($"id = {id} 的 ExtraOperation 方法完成:{Watch.ElapsedMilliseconds} ms");        }    }}

結果:有誤差;

 

接著配合我們的aync 和 我們 await 方式來進行。。。

   private static readonly Stopwatch Watch = new Stopwatch();        static void Main(string[] args)        {            Watch.Start();            const string url1 = "http://www.cnblogs.com/";            const string url2 = "http://www.cnblogs.com/liqingwen/";            //兩次調用 CountCharactersAsync 方法(非同步下載某網站內容,並統計字元的個數)            Task<int> t1 = CountCharacters(1, url1);            Task<int> t2 = CountCharacters(2, url2);            // 三次調用 ExtraOperation 方法(主要是通過拼接字串達到耗時操作)            for (var i = 0; i < 3; i++)            {                ExtraOperation(i + 1);  //類比主線程執行一些耗時的各種操作地啊;            }            //控制台輸出            Console.WriteLine($"{url1} 的字元個數:{t1.Result}");            Console.WriteLine($"{url2} 的字元個數:{t2.Result}");            Console.WriteLine($"總共耗時: {Watch.ElapsedMilliseconds} ms");            Console.ReadLine();        }        private static  async Task<int> CountCharacters(int id,string address)        {            var client = new WebClient();            Console.WriteLine($"開始調用 id={id} : {Watch.ElapsedMilliseconds} ms");            var result = await client.DownloadStringTaskAsync(address);            Console.WriteLine($"調用完成 id={id} : {Watch.ElapsedMilliseconds} ms");            return result.Length;        }        private static void ExtraOperation(int id)        {            //這裡是通過拼接字串進行一些相對耗時的操作            var s = "";            for (var i = 0; i < 6000; i++)            {                s += i;            }            Console.WriteLine($"id = {id} 的 ExtraOperation 方法完成:{Watch.ElapsedMilliseconds} ms");        }

 

結果,有誤差:

 沒有把必要花費在等待外部資源的請求的等待中,我們可讓一其非同步,然後執行我們的主線程的任務;

 關於非同步,多線程的幾個嘗試;

1. 一口一口的吃蛋糕和將蛋糕切成幾份來吃沒有區別;反而在切蛋糕會浪費不少的時間地呀;

2.線程初始化的時候,記住主線程的速度比子線程快,

3.本例子中使用了webclient,發送http請求,沒有必要一直等待請求響應,所以主線程的做點其他的事情;

關於非同步編程,還在繼續進行中...........

 

使用async 和 await方法來

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.