锁块中的异步方法我想在缓存中放置一个身份验证令牌,它可以跨多个应用程序域使用。此令牌将每小时过期一次。当客户端无法使用令牌进行授权时,它会要求令牌生成服务生成一个新令牌。我只希望第一个未成功通过身份验证的客户端执行此重新生成,因此我使用这样的锁定对象:publicasyncTaskGenerateToken(TokenoldToken){Tokentoken;锁(lockObject){varcachedToken=GetTokenFromCache();if(cachedToken==oldToken){varauthClient=newAuthClient(id,key);token=awaitauthClient.AuthenticateClientAsync();//KABOOMPutTokenInCache(令牌);}else{token=cachedToken;}}返回令牌;我的问题是AuthClient只有异步方法,并且在锁定语句块中不允许使用异步方法。我对AuthClient没有任何控制权,我可以使用另一种策略吗?可以使用SemaphoreSlim作为基本的异步就绪锁替代品:以上就是C#学习教程分享的全部内容:锁语句块中的异步方法。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——privatereadonlySemaphoreSlimlockObject=newSemaphoreSlim(1);publicasyncTaskGenerateToken(TokenoldToken){Tokentoken;等待lockObject.WaitAsync();尝试{varcachedToken=GetTokenFromCache();如果(cachedToken==oldToken)=newAuthClient(id,key);token=awaitauthClient.AuthenticateClientAsync();PutTokenInCache(令牌);}else{token=cachedToken;}}最后{lockObject.Release();}返回令牌;不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
