Я хочу поместить токен аутентификации в кеш, где он может использоваться в нескольких доменах приложений. Этот токен истекает каждый час. Когда клиент не может авторизоваться с токеном, он просит службу генерации маркера генерировать новую.Асинхронный метод в блоке блокировки-оператора
Я только хочу, чтобы это восстановление произойдет в первый клиент, который не проверяет подлинность успешно, поэтому я использовал объект блокировки, как это:
public async Task<Token> GenerateToken(Token oldToken)
{
Token token;
lock (lockObject)
{
var cachedToken = GetTokenFromCache();
if (cachedToken == oldToken)
{
var authClient = new AuthClient(id, key);
token = await authClient.AuthenticateClientAsync(); //KABOOM
PutTokenInCache(token);
}
else
{
token = cachedToken;
}
}
return token;
}
Мой вопрос AuthClient
имеет только async
методы и async
методы запрещены в блоках блокировки. У меня нет никакого контроля над AuthClient
, есть ли какая-то другая стратегия, которую я могу использовать здесь?
Вы используете .NET 4.5 или .NET 4.5.1? –
Я использую .NET 4.5 –
Kinda [дубликат] (http://stackoverflow.com/q/21404144/1997232). – Sinatr