2011-05-14 59 views
4

我想實現基於文件的自動增量標識值(在存儲在TXT文件中的int值),並且我試圖想出處理併發問題的最佳方法。此身份將用於我的內容的唯一ID。當保存新內容時,該文件被打開,值被讀取,遞增,新的內容被保存並且遞增的值被寫回文件(無論我們存儲下一個可用的ID還是最後發佈的ID並不重要)。在完成這個過程時,另一個過程可能會出現並嘗試保存新內容。上一個進程使用FileShare.None打開文件,因此在第一個進程釋放文件之前,沒有其他進程能夠讀取該文件。雖然這種情況發生的可能性很小,但仍然可能發生。當文件被鎖定時爲隊列文件操作稍後

現在,當發生這種情況,我們有兩種選擇:

  1. 等待文件變得可用 -

Emulate waiting on File.Open in C# when file is locked

我們在這裏談論毫秒,所以我想這隻要發生奇怪的事情並且文件永遠不可用,那麼這個問題就不會成爲問題,那麼這種解決方案會導致無限循環,因此不是理想的解決方案

  1. 實現某種隊列並對隊列中的文件運行所有操作。我的用戶體驗要求是,在保存/修改文件時,用戶永遠不應該被告知有關異常的信息,或者出現了問題 - 稍後當操作在隊列上失敗時,他會通過非常友好的用戶界面獲知有關它們的信息。

在寫這篇文章的時候,解決方案應該在ASP.NET MVC應用程序中工作(通過AJAX同步和異步),但如果可能的話,它應該使用也可以在Silverlight或Windows Forms中工作的概念或WPF應用程序。

關於這兩種選擇,你認爲哪一種更好,第二種選擇是什麼技術來實現這一點?

回答

2

ReaderWriterLockSlim類似乎是同步訪問共享資源的一個很好的解決方案。

+0

問題的第二部分呢?什麼可以用來開發這樣一個隊列? – mare 2011-05-14 22:28:35