Код обновления токена с await внутри lock не компилируется
private readonly object _sync = new();
public async Task<string> GetTokenAsync()
{
lock (_sync)
{
if (_token.IsExpired)
_token = await _auth.RefreshAsync();
return _token.Value;
}
}
Компилятор выдаёт ошибку: await нельзя использовать внутри lock. Как правильно синхронизировать асинхронное обновление?
- SemaphoreSlim с await WaitAsync
- Заменить await на .Result внутри lock
- Использовать Monitor.Enter вместо lock
- Убрать синхронизацию: гонки не будет
