標籤:介紹 visual ini start msdn tar second ram 技術
一、簡介
首先來看看.net的發展中的各個階段的特性:NET 與C# 的每個版本發布都是有一個“主題”。即:C#1.0Managed 程式碼→C#2.0泛型→C#3.0LINQ→C#4.0動態語言→C#4.5非同步編程
所謂的非同步編程是利用CPU空閑時間和多核的特性,它所返回的Task或Task是對await的一個承諾,當任務執行完畢後返回一個結果給接收者。這裡看到這個可能各位不太明白,不要緊,下面會有講解。
二、使用說明
三、樣本
實踐才是檢驗真知的最佳途徑。
using System;using System.Diagnostics;using System.Net.Http;using System.Threading.Tasks; namespace 非同步遞迴{ class Program { static void Main(string[] args) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); ConsoleAsync1(); stopwatch.Stop(); Console.WriteLine("同步方法用時:" + stopwatch.ElapsedMilliseconds); stopwatch.Reset(); stopwatch.Start(); ConsoleAsync(); stopwatch.Stop(); Console.WriteLine("非同步方法呼叫用時:"+ stopwatch.ElapsedMilliseconds); Console.Read(); } private static async void ConsoleAsync() { Console.WriteLine("非同步方法呼叫開始"); Console.WriteLine("Result:" + await SumAsync(10)); Console.WriteLine("非同步方法呼叫結束"); } private static async Taskint> SumAsync(int part) { if ((part += 10) >= 100) { return 100; } HttpClient client = new HttpClient(); Taskstring> getStringTask = client.GetStringAsync("http://msdn.microsoft.com"); Console.WriteLine(DateTime.Now.Millisecond + " 非同步 " + (await getStringTask).Length); return await SumAsync(part); } private static void ConsoleAsync1() { Console.WriteLine("同步方法開始"); Console.WriteLine("Result:" + SumAsync1(10)); Console.WriteLine("同步方法結束"); } private static int SumAsync1(int part) { if ((part += 10) >= 100) { return 100; } HttpClient client = new HttpClient(); Taskstring> getStringTask = client.GetStringAsync("http://msdn.microsoft.com"); Console.WriteLine(DateTime.Now.Millisecond + " 同步 " + getStringTask.Result.Length); return SumAsync1(part); } }}
樣本介紹:
1、這個例子中有兩種實現方式:(1)利用非同步編程的方式實現(2)利用普通同步方式實現
2、同時這個例子中實現了遞迴,這個可以不用考慮,博主只是想驗證一下在非同步情況下,遞迴是否有效而已,實驗結果為有效。
3、這段代碼中的GetStringAsync()方法是擷取遠程介面內容用的,主要目的是延長回應時間。
程式結果如下:
結果說明:
1、同步方法按規矩進行,有條不紊。
2、非同步方法呼叫直接執行完畢,用時7毫秒。執行過程非同步於主線程。
四、尾語
微軟的官方文檔很值得學習,大家感興趣的可以看看去。這裡引一個流程原理圖,所對應的樣本到文檔中去看,連結上方已給。
.NET4.5新特性之非同步編程(Async和Await)的使用