前言
本節(jié)主要介紹異步編程中Task、Async和Await的基礎(chǔ)知識(shí)。
什么是異步?
異步處理不用阻塞當(dāng)前線程來(lái)等待處理完成,而是允許后續(xù)操作,直至其它線程將處理完成,并回調(diào)通知此線程。
異步和多線程
相同點(diǎn):避免調(diào)用線程阻塞,從而提高軟件的可響應(yīng)性。
不同點(diǎn):
異步操作無(wú)須額外的線程負(fù)擔(dān),并且使用回調(diào)的方式進(jìn)行處理,在設(shè)計(jì)良好的情況下,處理函數(shù)可以不必使用共享變量(即使無(wú)法完全不用,最起碼可以減少 共享變量的數(shù)量),減少了死鎖的可能。C#5.0 .NET4.5 以后關(guān)鍵字Async和Await的使用,使得異步編程變得異常簡(jiǎn)單。
多線程中的處理程序依然是順序執(zhí)行,但是多線程的缺點(diǎn)也同樣明顯,線程的使用(濫用)會(huì)給系統(tǒng)帶來(lái)上下文切換的額外負(fù)擔(dān)。并且線程間的共享變量可能造成死鎖的出現(xiàn)。