真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#中Finally的用法是什么

這篇文章主要介紹“C#中Finally的用法是什么”,在日常操作中,相信很多人在C#中Finally的用法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”C#中Finally的用法是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

在石嘴山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需策劃設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),網(wǎng)絡(luò)營(yíng)銷推廣,外貿(mào)營(yíng)銷網(wǎng)站建設(shè),石嘴山網(wǎng)站建設(shè)費(fèi)用合理。

System.Collections.Concurrent.ConcurrentQueue

中看到一段有意思的代碼.注意這段代碼是寫在ConcurrentQueue這個(gè)用于并發(fā)中的隊(duì)列. 注意,這是一個(gè)無(wú)鎖隊(duì)列的實(shí)現(xiàn).

try  { }   finally  {       newhigh = Interlocked.Increment(ref m_high);       if (newhigh <= SEGMENT_SIZE - 1)       {           m_array[newhigh] = value;           m_state[newhigh].m_value = true;       }       if (newhigh == SEGMENT_SIZE - 1)       {           Grow();       }   }

有意思嗎?代碼中使用了一個(gè)空的Try代碼塊.然后把代碼全都寫在了Finally塊.這么做的目地何在呢?

這其實(shí)是一個(gè)小的技巧:放在Finally中的代碼可以防止執(zhí)行線程在執(zhí)行過程中被另一個(gè)線程用調(diào)用了Thread.Abort()或Thread. Interrupt()打斷.從而保證這段代碼執(zhí)行的完整性。

舉個(gè)例子: 如果不將上面代碼放到Finally中運(yùn)行.假如正好有一個(gè)線程A執(zhí)行到 m_array[newhigh] = value;而另外一個(gè)線程B調(diào)用了線程A的Thread.Abort() 那么m_array[newhigh] = value; 以后的代碼可能沒有機(jī)會(huì)得到執(zhí)行.那么將引起ConcurrentQueue的不完整。

而放到Finally中的代碼,即使線程B在線程A執(zhí)行時(shí)調(diào)用了Thread.Abort()或Thread. Interrupt()方法時(shí)也能保證Finally塊中的代碼被完整的執(zhí)行。

事實(shí)上,這個(gè)特性是在.net framework2.0中引入的.在.net 1.1時(shí)Finally沒有這個(gè)作用.另外 Tread.Abort有可能打斷線程內(nèi)的靜態(tài)構(gòu)構(gòu)函數(shù)執(zhí)行。

另外我認(rèn)為同樣的功能也可以用這個(gè)Thread.BeginCriticalRegion 和Thread.EndCriticalRegion(); 來(lái)實(shí)現(xiàn)。

到此,關(guān)于“C#中Finally的用法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!


新聞標(biāo)題:C#中Finally的用法是什么
瀏覽地址:http://weahome.cn/article/jpcgei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部