我正在嘗試同步要提供圖像的webapi。當我請求一個特定的圖像時,它會檢查圖像是否已經存在,如果有,則返回;如果不存在,則會創建並返回。.net文件訪問同步
我的問題是,它顯然不是像這樣的線程安全;我有一個線程進來,並確定圖像不存在,並開始創建它,而另一個請求進來,也確定圖像不存在(只是還),並嘗試創建它。我知道我可以鎖定整個事情以避免這個問題,但我試圖避免這個問題。將會有100,000個圖像,我不明白爲什麼我需要停止所有線程閱讀其他圖像,因爲只有一個圖像尚不存在。有沒有一種「通常」的方式來做到這一點?圖像是由ID請求的,我可以鎖定特定圖像的ID嗎?例如
List<long> _locks = new List<long>();
_locks.Add(17);
lock(_locks[0]){...}
它只是看起來不正確...肯定有更好的解決方案?
你可以做的是,在你的'Read'上添加3次重試周期,相隔2秒。因此,如果您收到「文件訪問異常」,大概在寫入文件時,請等待並再次嘗試讀取。 –
@ T.S。感謝隊友,我想到了這一點,我猜想這是一個「備份」解決方案,但如果可以的話,我想盡量避免出現異常。我在多線程方面沒有做太多的工作,所以試圖弄清楚如何正確地做到這一點。 嘗試鎖定一個(靜態)對象上的整個部分,平均響應時間從20ms到200ms ... !! – Andy