1. 程式人生 > >.NET 中的 async/await 非同步程式設計

.NET 中的 async/await 非同步程式設計

前言

最近在學習Web Api框架的時候接觸到了async/await,這個特性是.NET 4.5引入的,由於之前對於非同步程式設計不是很瞭解,所以花費了一些時間學習一下相關的知識,並整理成這篇部落格,如果在閱讀的過程中發現不對的地方,歡迎大家指正。

同步程式設計與非同步程式設計

通常情況下,我們寫的C#程式碼就是同步的,執行在同一個執行緒中,從程式的第一行程式碼到最後一句程式碼順序執行。而非同步程式設計的核心是使用多執行緒,通過讓不同的執行緒執行不同的任務,實現不同程式碼的並行執行。

前臺執行緒與後臺執行緒

關於多執行緒,早在.NET2.0時代,基礎類庫中就提供了Thread實現。預設情況下,例項化一個Thread建立的是前臺執行緒,只要有前臺執行緒在執行,應用程式的程序就一直處於執行狀態,以控制檯應用程式為例,在Main方法中例項化一個Thread,這個Main方法就會等待Thread執行緒執行完畢才退出。而對於後臺執行緒,應用程式將不考慮其是否執行完畢,只要應用程式的主執行緒和前臺執行緒執行完畢就可以退出,退出後所有的後臺執行緒將被自動終止。來看程式碼應該更清楚一些:

C#
123456789101112131415161718192021222324252627282930313233343536373839usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;usingSystem.Threading.Tasks;namespaceConsoleApp{classProgram{staticvoidMain(string[]args){Console.WriteLine
("主執行緒開始");//例項化Thread,預設建立前臺執行緒Thread t1=newThread(DoRun1);t1.Start();//可以通過修改Thread的IsBackground,將其變為後臺執行緒Thread t2=newThread(DoRun2){IsBackground=true};t2.Start();Console.WriteLine("主執行緒結束");}staticvoidDoRun1(){Thread.Sleep(500);Console.WriteLine(

相關推薦

.NET async/await 非同步程式設計

前言 最近在學習Web Api框架的時候接觸到了async/await,這個特性是.NET 4.5引入的,由於之前對於非同步程式設計不是很瞭解,所以花費了一些時間學習一下相關的知識,並整理成這篇部落格,如果在閱讀的過程中發現不對的地方,歡迎大家指正。 同步

.NET Web應用為什麼要使用async/await非同步程式設計

# 前言 1. 什麼是async/await? await和async是.NET Framework4.5框架、C#5.0語法裡面出現的技術,目的是用於簡化非同步程式設計模型。 2. async和await的關係? async和await是成對出現的。 async出現在方法的聲明裡,用於批註一個非同步方法。

ASP.Netasync+await非同步程式設計

在.NET Framework4.5框架、C#5.0語法中,通過async和await兩個關鍵字,引入了一種新的基於任務的非同步程式設計模型(TAP)。在這種方式下,可以通過類似同步方式編寫非同步程式碼,極大簡化了非同步程式設計模型。 用法: public async Task<int> Get

AsyncAwait非同步程式設計的原理

原文地址:http://www.cnblogs.com/ioexception/p/Async_Await_Asynchronous_Programming.html 1. 簡介  從4.0版本開始.NET引入並行程式設計庫,使用者能夠通過這個庫快捷的開發平行計算和並行任務

.net4.5使用asyncawait非同步程式設計例項

在.NET4.5中新增了非同步程式設計的新特性async和await,使得非同步程式設計更為簡單。通過特性可以將這項複雜的工作交給編譯器來完成了。之前傳統的方式來實現非同步程式設計較為複雜,這樣對於程式猿來說處理起來比較困難,除錯也沒那麼方便,後續的維護工作也比較痛苦。 A

[翻譯] Python 3.5async/await的工作機制

sum con trigger color 調用 普通 計算機程序 mom issue Python 3.5中async/await的工作機制 多處翻譯出於自己理解,如有疑惑請參考原文 原文鏈接 身為Python核心開發組的成員,我對於這門語言的各種細節充滿好奇。盡管我

C# async await的使用

cep .html dex sync ocs archive git http hub HttpLib使用 https://github.com/j6mes/httplib/ https://www.cnblogs.com/haogj/archive/2013/01/02

C# async/await非同步變成深入理解

非同步函式簡介 一般指 async 修飾符宣告得、可包含await表示式得方法或匿名函式。   宣告方式 非同步方法的宣告語法與其他方法完全一樣, 只是需要包含 async 關鍵字。async可以出現在返回值之前的任何位置, 如下示例: async public st

async/await 非同步

async/await 是一個用同步的思維來解決非同步問題的方案。 async 函式就是 Generator 函式的語法糖。 async 函式的優點 async寫在function前面,該函式返回值是一個promise,可以直接使用then方法。 async functio

vueasync-await的使用誤區

前言 曾經見過為了讓鉤子函式的非同步程式碼可以同步執行,而對鉤子函式使用async/await,就好像下面的程式碼: // exp-01 export default { async created() { const timeKey = 'cost'; console.time(ti

【WePY小程式框架實戰四】-使用async&await非同步請求資料

async await 是對promise的近一步優化,既解決了promise鏈式then的這種寫法壁壘,又讓非同步請求更像同步,若對async await不太瞭解的同學可以直接參考阮一峰老師的文章async 函式的含義和用法,這裡我們只關注怎麼在小程式wepy架構中如何使用。 依賴庫 import

Javascript常見的非同步程式設計模型

在Javascript非同步程式設計專題的前一篇文章淺談Javascript中的非同步中,我簡明的闡述了“Javascript中的非同步原理”、“Javascript如何在單執行緒上實現非同步呼叫”以及“Javascript中的定時器”等相關問題。 本篇文章我將

關於C#async/await的異常處理(下)-(轉載)

上一篇文章裡我們討論了某些async/await的用法中出現遺漏異常的情況,並且談到該如何使用WhenAll輔助方法來避免這種情況。WhenAll輔助方法將會彙總一系列的任務物件,一旦其中某個出錯,則會丟擲“其中一個”異常。那麼究竟是哪個異常?如果我們要處理所有的異常怎麼辦?我們這次就來詳細討論await操作

How and Where Concurrent Asynchronous I/O with ASP.NET Web API 對非同步程式設計分析的非常的好

http://www.tugberkugurlu.com/archive/how-and-where-concurrent-asynchronous-io-with-asp-net-web-api

傳統asp.net小心 async/await

最近在改老專案時,幹了一件自以為很有成就感的事,心想 “專案都是同步方法,為啥不用非同步方法呢?”,於是有了非同步方法,型別下面的程式碼(當然是舉例子說明啊) //更新某人名下公司名稱 public Task<bool> UpdateUser(string id,string compan

.NET 基於Task的非同步程式設計模型

最近下載了Visual Studio Async CTP,體驗了下基於Task的非同步程式設計帶來的新特性。在CTP中,增加了新的關鍵字: async, await。尤其是在SL,WP7的程式設計中,大量使用非同步呼叫的環境裡,async, await的確能減少程式設計的複雜

javascriptasync await的用法

async和await必須成對出現,示例: function file2txtArr(file) { var fr =

以Python為例的Async / Await程式設計基礎

來源:Redislabs 作者:Loris Cro 翻譯:Kevin (公眾號:中介軟體小哥)   近年來,許多程式語言都在努力改進它們的併發原語。Go 語言有 goroutines,Ruby 有 fibers,當然,還有 Node.js 幫助普及的 async/await,這是

深入理解協程(四):async/await非同步爬蟲實戰

本文目錄: 同步方式爬取部落格標題 async/await非同步爬取部落格標題 本片為深入理解協程系列文章的補充。 你將會在從本文中瞭解到:async/await如何運用的實際的爬蟲中。 案例 從CSDN上批量爬取指定文章的標題。文章列表如下: urls = [ 'https://blog.csd

非同步程式設計Async/Await的最佳做法

近日來,湧現了許多關於 Microsoft .NET Framework 4.5 中新增了對 async 和 await 支援的資訊。 本文旨在作為學習非同步程式設計的“第二步”;我假設您已閱讀過有關這一方面的至少一篇介紹性文章。 本文不提供任何新內容,Stack Overflo