參考http://www.cnblogs.com/jesse2013/p/async-and-await.html
事例:
static void Main(string[] args) { for (int i = 0; i < 4; i++) { TestAsync(); } Console.ReadLine(); } static async Task TestAsync() { Console.WriteLine("Test()開始, Thread Id: {0}\r\n", Thread.CurrentThread.ManagedThreadId); var name = GetNameAsync(); //我們這里沒有用 await,所以下面的代碼可以繼續執行 // 但是如果上面是 await GetNameAsync(),下面的代碼就不會立即執行,輸出結果就不一樣了。
var res = await name; // Console.WriteLine("await GetName1: {0},得到結果進行其它操作", res ); Console.WriteLine("Test()結束.\r\n");
} static async Task<string> GetNameAsync() { // 這里還是主線程 Console.WriteLine("GetName()開始, thread Id is: {0}", Thread.CurrentThread.ManagedThreadId); return await Task.Run(() => { Thread.Sleep(1000); Console.WriteLine("'GetName' Thread Id: {0}", Thread.CurrentThread.ManagedThreadId); return "Jesse"; }); }
、、、、
static async Task Test(){ Task<string> task = Task.Run(() =>{ Console.WriteLine("另一個線程在運行!"); // 這句話只會被執行一次 Thread.Sleep(2000); return "Hello World"; }); // 這里主線程會掛起等待,直到task執行完畢我們拿到返回結果 var result = task.GetAwaiter().GetResult(); // 這里不會掛起等待,因為task已經執行完了,我們可以直接拿到結果 var result2 = await task; Console.WriteLine(str); }