/// <summary> /// 获取可用AccessTokenResult对象 /// </summary> /// <param name="clientId"></param> /// <param name="getNewToken">是否强制重新获取新的Token</param> /// <returns></returns> public static async Task <AccessTokenResult> GetAccessTokenResultAsync(string clientId, bool getNewToken = false, SessionType sessionType = SessionType.Prod) { if (!CheckRegistered(clientId)) { throw new UnRegisterClientIdException(clientId, string.Format("此clientId({0})尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!", clientId)); } var accessTokenBag = TryGetItem(clientId); using (Cache.BeginCacheLock(LockResourceName, clientId))//同步锁 { if (getNewToken || accessTokenBag.AccessTokenExpireTime <= DateTime.Now) { //已过期,重新获取 var accessTokenResult = await CommonApi.GetAccessTokenAsync(accessTokenBag.ClientId, accessTokenBag.ClientSecret, accessTokenBag.PreAuthCode, accessTokenBag.RedirectUri, sessionType); accessTokenBag.AccessTokenResult = accessTokenResult; accessTokenBag.AccessTokenExpireTime = ApiUtility.GetExpireTime(accessTokenBag.AccessTokenResult.data.expires_in); } } return(accessTokenBag.AccessTokenResult); }