/// <summary> /// 【异步方法】获取可用AccessToken /// </summary> /// <param name="componentAppId"></param> /// <param name="componentVerifyTicket">如果为null则自动获取</param> /// <param name="getNewToken">是否强制重新获取新的Token</param> /// <returns></returns> public static async Task <ComponentAccessTokenResult> GetComponentAccessTokenResultAsync(string componentAppId, string componentVerifyTicket = null, bool getNewToken = false) { if (!CheckRegistered(componentAppId)) { throw new WeixinOpenException(UN_REGISTER_ALERT); } var accessTokenBag = TryGetItem(componentAppId); using (Cache.BeginCacheLock(LockResourceName + ".GetComponentAccessTokenResult", componentAppId))//同步锁 { if (getNewToken || accessTokenBag.ComponentAccessTokenExpireTime <= DateTime.Now) { //已过期,重新获取 componentVerifyTicket = componentVerifyTicket ?? TryGetComponentVerifyTicket(componentAppId); var componentAccessTokenResult = await ComponentApi.GetComponentAccessTokenAsync(accessTokenBag.ComponentAppId, accessTokenBag.ComponentAppSecret, componentVerifyTicket); accessTokenBag.ComponentAccessTokenResult = componentAccessTokenResult; accessTokenBag.ComponentAccessTokenExpireTime = ApiUtility.GetExpireTime(componentAccessTokenResult.expires_in); Update(accessTokenBag);//更新到缓存 } } return(accessTokenBag.ComponentAccessTokenResult); }