В последние несколько дней я сталкиваюсь с периодической тупиковой ситуацией из приведенного ниже фрагмента кода. Это происходит только тогда, когда мы используем асинхронный вызов, мой вызов API зависает на бесконечный период времени, самое худшее, что я не могу его воспроизвести на моей локальной машине, он поставляется в UAT и производственной среде (работает нормально после сброса IIS).
Кроме того, мы используем этот метод в проекте WebAPI, и класс зарегистрирован как WebPerRequest.
static SemaphoreSlim semaphore = new SemaphoreSlim(1, 1);
static ConcurrentDictionary<string, List<Employee>> _data;
/// Intermittent Deadlock after some time
private async Task<ConcurrentDictionary<string, List<Employee>>> GetEmployees()
{
await semaphore.WaitAsync();
try
{
if (_data == null)
{
// async db call
}
}
finally
{
semaphore.Release();
}
return _data ;
}
// Working Fine
private async Task<ConcurrentDictionary<string, List<Employee>>> GetEmployees()
{
await semaphore.WaitAsync();
try
{
if (_data == null)
{
// sync db call
}
}
finally
{
semaphore.Release();
}
return _data ;
}