【发布时间】:2014-12-01 15:13:30
【问题描述】:
我想将身份验证令牌放在缓存中,以便在多个应用程序域中使用它。此令牌将每小时过期。当客户端无法使用令牌进行授权时,它会要求令牌生成服务生成一个新的。
我只希望第一个未成功验证的客户端发生这种重新生成,因此我使用了这样的锁定对象:
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?
-
有点像duplicate。
标签: c#