Я работаю над приложением веб-API, которое подключается к бэкэнд-системе через API. Одна из проблем работы с API заключается в том, что для него требуется поддерживать удаленный сеанс, который совместно используется всеми потоками/запросами для веб-API. Сессия заканчивается каждые несколько часов и должна быть обновлена через логин..NET Многопоточный доступ к сеансу общего входа
упрощенная версия моей текущей реализации ниже:
private static Object loginLock = new Object();
if(!Api.IsLoggedIn)
{
lock(loginLock)
{
if(!Api.IsLoggedIn)
{
Api.Login();
}
}
}
// Do stuff with the API
При высокой параллельной нагрузке, когда требуется Логин, потоки получить сложены в замок и пропускаются по одному за раз при успешной логин, который вызывает узкое место в производительности.
Я ищу, чтобы заблокировать все потоки, когда требуется логин, но позвольте им пройти через успешный вход в систему.
Есть ли лучший образец для решения этой проблемы? Похоже, что Googling указывает, что ReaderWriterLockSlim
или Monitor Wait/Pulse/PulseAll
могут быть лучшими кандидатами, чем стандартный замок.
Из любопытства, что происходит, когда сеанс истекает после проверки Api.IsLoggedIn, но до фактического использования Api? –
Ошибка API вызовет ошибку «no valid session», но мы этого не видели (пока). – WayneC
В чем же проблема? Запросы в очереди кажутся неизбежными. Но как только сеанс становится доступным, очередь должна очищаться очень быстро. Как миллион потоков в секунду или около того. – usr