第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“使用”語句與“最終嘗試”

“使用”語句與“最終嘗試”

慕容3067478 2019-10-18 14:55:49
我有一堆將要使用讀/寫鎖的屬性。我可以使用a try finally或using子句實現(xiàn)它們。在中,try finally我將在之前獲取鎖,然后在中try釋放finally。在該using子句中,我將創(chuàng)建一個在其構(gòu)造函數(shù)中獲取鎖并在其Dispose方法中釋放該鎖的類。我在許多地方都使用了讀/寫鎖,因此我一直在尋找比更為簡潔的方法try finally。我很想聽聽一些關(guān)于為什么可能不推薦一種方法,或者為什么一種方法可能比另一種更好的想法。方法1(try finally):static ReaderWriterLock rwlMyLock_m  = new ReaderWriterLock();private DateTime dtMyDateTime_mpublic DateTime MyDateTime{    get    {        rwlMyLock_m .AcquireReaderLock(0);        try        {            return dtMyDateTime_m        }        finally        {            rwlMyLock_m .ReleaseReaderLock();        }    }    set    {        rwlMyLock_m .AcquireWriterLock(0);        try        {            dtMyDateTime_m = value;        }        finally        {            rwlMyLock_m .ReleaseWriterLock();        }    }}方法2:static ReaderWriterLock rwlMyLock_m  = new ReaderWriterLock();private DateTime dtMyDateTime_mpublic DateTime MyDateTime{    get    {        using (new ReadLock(rwlMyLock_m))        {            return dtMyDateTime_m;        }    }    set    {        using (new WriteLock(rwlMyLock_m))        {            dtMyDateTime_m = value;        }    }}public class ReadLock : IDisposable{    private ReaderWriterLock rwl;    public ReadLock(ReaderWriterLock rwl)    {        this.rwl = rwl;        rwl.AcquireReaderLock(0);    }    public void Dispose()    {        rwl.ReleaseReaderLock();    }}public class WriteLock : IDisposable{    private ReaderWriterLock rwl;    public WriteLock(ReaderWriterLock rwl)    {        this.rwl = rwl;        rwl.AcquireWriterLock(0);    }    public void Dispose()    {        rwl.ReleaseWriterLock();    }}
查看完整描述

3 回答

?
尚方寶劍之說

TA貢獻(xiàn)1788條經(jīng)驗 獲得超4個贊

從MSDN,使用Statement(C#參考)


using語句確保即使在調(diào)用對象的方法時發(fā)生異常,也將調(diào)用Dispose。通過將對象放在try塊中,然后在finally塊中調(diào)用Dispose,可以達(dá)到相同的結(jié)果。實際上,這就是編譯器翻譯using語句的方式。前面的代碼示例在編譯時擴展為以下代碼(請注意,額外的花括號可創(chuàng)建對象的有限作用域):


{

  Font font1 = new Font("Arial", 10.0f);

  try

  {

    byte charset = font1.GdiCharSet;

  }

  finally

  {

    if (font1 != null)

      ((IDisposable)font1).Dispose();

  }

}

因此,基本上,這是相同的代碼,但是具有很好的自動空檢查和變量的額外作用域。該文檔還指出,它“確保IDisposable對象的正確使用”,因此您將來也可能會為任何晦澀的情況獲得更好的框架支持。


因此,選擇選項2。


將變量包含在不再需要的范圍內(nèi)立即結(jié)束的作用域也是一個加號。


查看完整回答
反對 回復(fù) 2019-10-18
?
慕田峪4524236

TA貢獻(xiàn)1875條經(jīng)驗 獲得超5個贊

考慮這兩種解決方案都不好,因為它們掩蓋了異常的可能性。


try沒有a的A catch顯然是個壞主意;請參閱MSDN,以了解該using聲明為何同樣危險。


另請注意,Microsoft現(xiàn)在建議使用ReaderWriterLockSlim而不是ReaderWriterLock。


最后,請注意,Microsoft示例使用兩個try-catch塊來避免這些問題,例如


try

{

    try

    {

         //Reader-writer lock stuff

    }

    finally

    {

         //Release lock

    }

 }

 catch(Exception ex)

 {

    //Do something with exception

 }

一個簡單,一致,干凈的解決方案是一個不錯的目標(biāo),但是假設(shè)您不能僅使用lock(this){return mydateetc;},您可能會重新考慮該方法。有了更多信息,我相信堆棧溢出可以提供幫助;-)


查看完整回答
反對 回復(fù) 2019-10-18
  • 3 回答
  • 0 關(guān)注
  • 554 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號