Вступить в клуб →
средняявопросasync/await, многопоточность и фоновые задачи

Код обновления токена с 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
  • Убрать синхронизацию: гонки не будет

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела