2010-06-15 40 views
0

在ASP.NET 3.5中,我們懷疑由「Timer」觸發的委託會阻止其他方法調用。從日誌中,一些函數調用將等待代理完成並繼續工作。.NET「Timer」會阻止其他方法調用?

這是真的嗎?如果是,我可以做什麼解決方法?

PS:委託中包含的代碼使用WCF檢索數據和下面的代碼

private void Replace<T>(ref IList<T> src, IList<T> des) 
    { 
     lock(src) 
     { 
      while (src.Count > 0) 
      { 
       GC.SuppressFinalize(src.ElementAt(0)); 
       src.RemoveAt(0); 
      } 
      GC.SuppressFinalize(src); 
      src = des; 
     } 
    } 

非常感謝。

回答

1

這取決於您使用的Timer實現 - 至少有三個。如果您使用Timer,它只是在沒有同步對象的情況下在線程池中觸發,則不應該成爲問題。

當然,在通話期間鎖定的事實將阻止鎖定在同一對象上的任何其他事物。

0

這與您的具體問題無關,但您的代碼中的GC.SuppressFinalize調用對我來說是一個巨大的紅旗。由於其預期目的,其使用通常僅限於實現IDisposable接口。他們在這裏使用它的方式可能會導致資源泄漏。有關更多信息,請閱讀Implementing Finalize and Dispose to Clean Up Unmanaged Resources