我正在研究通過API連接到後端系統的Web API應用程序。使用API的一個挑戰是它需要維護一個遠程會話,該會話在Web API的所有線程/請求之間共享。會話每隔幾個小時到期,需要通過登錄進行「刷新」。.NET多線程訪問共享登錄會話
我目前實現的簡化版本如下:
private static Object loginLock = new Object();
if(!Api.IsLoggedIn)
{
lock(loginLock)
{
if(!Api.IsLoggedIn)
{
Api.Login();
}
}
}
// Do stuff with the API
在高併發負載,需要登錄時,線程都在鎖堆積起來,並通過一個在成功都讓在同一時間登錄導致性能瓶頸。
我在尋找的是一種在需要登錄時阻止所有線程的方法,但是在成功登錄後讓它們全部通過。
解決這個問題有更好的模式嗎?谷歌搜索似乎表明,ReaderWriterLockSlim
或Monitor Wait/Pulse/PulseAll
可能比標準鎖更好的候選人。
出於好奇,當會話在'Api.IsLoggedIn'檢查後但在實際使用Api之前過期會發生什麼? –
API調用會失敗,出現「無效會話」錯誤,但我們還沒有看到這種情況(到目前爲止)。 – WayneC
究竟是什麼問題?排隊的請求似乎是不可避免的。但是,一旦會話變得可用,隊列應該非常快地清除。就像每秒100萬線程一樣。 – usr