Skip to content

Commit

Permalink
完善异步方法
Browse files Browse the repository at this point in the history
  • Loading branch information
JeffreySu committed Apr 21, 2019
1 parent b690a86 commit 3a582aa
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,10 @@ public class AccessTokenContainer : BaseContainer<AccessTokenBag>
{
const string LockResourceName = "MP.AccessTokenContainer";


#region 同步方法


/// <summary>
/// 注册应用凭证信息,此操作只是注册,不会马上获取Token,并将清空之前的Token
/// </summary>
Expand All @@ -176,52 +180,6 @@ public static void Register(string appId, string appSecret, string name = null)
RegisterAsync(appId, appSecret, name).Wait();
}

/// <summary>
/// 【异步方法】注册应用凭证信息,此操作只是注册,不会马上获取Token,并将清空之前的Token
/// </summary>
/// <param name="appId">微信公众号后台的【开发】>【基本配置】中的N“AppID(应用ID)”</param>
/// <param name="appSecret">微信公众号后台的【开发】>【基本配置】中的“AppSecret(应用密钥)”</param>
/// <param name="name">标记AccessToken名称(如微信公众号名称),帮助管理员识别。当 name 不为 null 和 空值时,本次注册内容将会被记录到 Senparc.Weixin.Config.SenparcWeixinSetting.Items[name] 中,方便取用。</param>
public static async Task RegisterAsync(string appId, string appSecret, string name = nuNll)
{
//记录注册信息,RegisterFunc委托内的过程会在缓存丢失之后自动重试
RegisterFunc = async () =>
{
//using (FlushCache.CreateInstance())
//{
var bag = new AccessTokenBag()
{
//Key = appId,
Name = name,
AppId = appId,
AppSecret = appSecret,
AccessTokenExpireTime = DateTimeOffset.MinValue,
AccessTokenResult = new AccessTokenResult()
};
await UpdateAsync(appId, bag, null);//第一次添加,此处已经立即更新
return bag;
//}
};

var registerTask = RegisterFunc();

if (!name.IsNullOrEmpty())
{
Senparc.Weixin.Config.SenparcWeixinSetting.Items[name].WeixinAppId = appId;
Senparc.Weixin.Config.SenparcWeixinSetting.Items[name].WeixinAppSecret = appSecret;
}

//为JsApiTicketContainer进行自动注册
var registerJsApiTask = JsApiTicketContainer.RegisterAsync(appId, appSecret, name);

//OAuthAccessTokenContainer进行自动注册
OAuthAccessTokenContainer.Register(appId, appSecret, name);

Task.WaitAll(new[] { registerTask, registerJsApiTask });
}

#region 同步方法

#region AccessToken

/// <summary>
Expand Down Expand Up @@ -286,6 +244,50 @@ public static AccessTokenResult GetAccessTokenResult(string appId, bool getNewTo
#if !NET35 && !NET40
#region 异步方法

/// <summary>
/// 【异步方法】注册应用凭证信息,此操作只是注册,不会马上获取Token,并将清空之前的Token
/// </summary>
/// <param name="appId">微信公众号后台的【开发】>【基本配置】中的N“AppID(应用ID)”</param>
/// <param name="appSecret">微信公众号后台的【开发】>【基本配置】中的“AppSecret(应用密钥)”</param>
/// <param name="name">标记AccessToken名称(如微信公众号名称),帮助管理员识别。当 name 不为 null 和 空值时,本次注册内容将会被记录到 Senparc.Weixin.Config.SenparcWeixinSetting.Items[name] 中,方便取用。</param>
public static async Task RegisterAsync(string appId, string appSecret, string name = null)
{
//记录注册信息,RegisterFunc委托内的过程会在缓存丢失之后自动重试
RegisterFunc = async () =>
{
//using (FlushCache.CreateInstance())
//{
var bag = new AccessTokenBag()
{
//Key = appId,
Name = name,
AppId = appId,
AppSecret = appSecret,
AccessTokenExpireTime = DateTimeOffset.MinValue,
AccessTokenResult = new AccessTokenResult()
};
await UpdateAsync(appId, bag, null);//第一次添加,此处已经立即更新
return bag;
//}
};

var registerTask = RegisterFunc();

if (!name.IsNullOrEmpty())
{
Senparc.Weixin.Config.SenparcWeixinSetting.Items[name].WeixinAppId = appId;
Senparc.Weixin.Config.SenparcWeixinSetting.Items[name].WeixinAppSecret = appSecret;
}

//为JsApiTicketContainer进行自动注册
var registerJsApiTask = JsApiTicketContainer.RegisterAsync(appId, appSecret, name);

//OAuthAccessTokenContainer进行自动注册
var registerOAuthTask = OAuthAccessTokenContainer.RegisterAsync(appId, appSecret, name);

Task.WaitAll(new[] { registerTask, registerJsApiTask, registerOAuthTask });//等待所有任务完成
}

#region AccessToken

/// <summary>
Expand Down Expand Up @@ -329,7 +331,7 @@ public static async Task<IAccessTokenResult> GetAccessTokenResultAsync(string ap
throw new UnRegisterAppIdException(appId, string.Format("此appId({0})尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!", appId));
}

var accessTokenBag = TryGetItem(appId);
var accessTokenBag = await TryGetItemAsync(appId);

using (await Cache.BeginCacheLockAsync(LockResourceName, appId))//同步锁
{
Expand All @@ -339,7 +341,7 @@ public static async Task<IAccessTokenResult> GetAccessTokenResultAsync(string ap
var accessTokenResult = await CommonApi.GetTokenAsync(accessTokenBag.AppId, accessTokenBag.AppSecret);
accessTokenBag.AccessTokenResult = accessTokenResult;
accessTokenBag.AccessTokenExpireTime = ApiUtility.GetExpireTime(accessTokenBag.AccessTokenResult.expires_in);
Update(accessTokenBag, null);//更新到缓存
await UpdateAsync(accessTokenBag, null);//更新到缓存
}
}
return accessTokenBag.AccessTokenResult;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,6 @@ public class JsApiTicketContainer : BaseContainer<JsApiTicketBag>
/// <param name="appId"></param>
/// <param name="appSecret"></param>
/// <param name="name">标记JsApiTicket名称(如微信公众号名称),帮助管理员识别。当 name 不为 null 和 空值时,本次注册内容将会被记录到 Senparc.Weixin.Config.SenparcWeixinSetting.Items[name] 中,方便取用。</param>
/*此接口不提供异步方法*/
[Obsolete("请使用 RegisterAsync() 方法")]
public static void Register(string appId, string appSecret, string name = null)
{
Expand All @@ -172,7 +171,6 @@ public static void Register(string appId, string appSecret, string name = null)
/// <param name="appId"></param>
/// <param name="appSecret"></param>
/// <param name="name">标记JsApiTicket名称(如微信公众号名称),帮助管理员识别。当 name 不为 null 和 空值时,本次注册内容将会被记录到 Senparc.Weixin.Config.SenparcWeixinSetting.Items[name] 中,方便取用。</param>
/*此接口不提供异步方法*/
public static async Task RegisterAsync(string appId, string appSecret, string name = null)
{
//记录注册信息,RegisterFunc委托内的过程会在缓存丢失之后自动重试
Expand Down Expand Up @@ -276,9 +274,9 @@ public static JsApiTicketResult GetJsApiTicketResult(string appId, bool getNewTi
/// <returns></returns>
public static async Task<string> TryGetJsApiTicketAsync(string appId, string appSecret, bool getNewTicket = false)
{
if (!CheckRegistered(appId) || getNewTicket)
if (!await CheckRegisteredAsync(appId) || getNewTicket)
{
Register(appId, appSecret);
await RegisterAsync(appId, appSecret);
}
return await GetJsApiTicketAsync(appId, getNewTicket);
}
Expand Down Expand Up @@ -308,8 +306,8 @@ public static async Task<JsApiTicketResult> GetJsApiTicketResultAsync(string app
throw new UnRegisterAppIdException(null, "此appId尚未注册,请先使用JsApiTicketContainer.Register完成注册(全局执行一次即可)!");
}

var jsApiTicketBag = TryGetItem(appId);
using (Cache.BeginCacheLock(LockResourceName, appId))//同步锁
var jsApiTicketBag = await TryGetItemAsync(appId);
using (await Cache.BeginCacheLockAsync(LockResourceName, appId))//同步锁
{
if (getNewTicket || jsApiTicketBag.JsApiTicketExpireTime <= SystemTime.Now)
{
Expand All @@ -318,7 +316,7 @@ public static async Task<JsApiTicketResult> GetJsApiTicketResultAsync(string app
//jsApiTicketBag.JsApiTicketResult = CommonApi.GetTicket(jsApiTicketBag.AppId, jsApiTicketBag.AppSecret);
jsApiTicketBag.JsApiTicketResult = jsApiTicketResult;
jsApiTicketBag.JsApiTicketExpireTime = SystemTime.Now.AddSeconds(jsApiTicketBag.JsApiTicketResult.expires_in);
Update(jsApiTicketBag, null);
await UpdateAsync(jsApiTicketBag, null);
}
}
return jsApiTicketBag.JsApiTicketResult;
Expand Down

0 comments on commit 3a582aa

Please sign in to comment.