我正在编写一个计划任务,用于从 tradeGecko 刷新访问令牌。这是任务的代码:
using Newtonsoft.Json.Linq;
using Nop.Core;
using Nop.Core.Domain.Orders;
using Nop.Services.Configuration;
using Nop.Services.Tasks;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static Nop.Core.TradeGeckoHelperMethods;
namespace Nop.Services.Catalog
{
public partial class TradeGeckoRefreshToken : ITask
{
private readonly IStoreContext _storeContext;
private readonly ISettingService _settingService;
public TradeGeckoRefreshToken(IStoreContext storeContext, ISettingService settingService)
{
_storeContext = storeContext;
_settingService = settingService;
}
public async System.Threading.Tasks.Task UpdateRefreshToken()
{
var orderSettings = _settingService.LoadSetting<OrderSettings>();
Task<JObject> returnObject = TradeGeckoHelperMethods.RefreshAccessToken(orderSettings.TradeGeckoApplicationId, orderSettings.TradeGeckoSecretId, orderSettings.TradeGeckoCallBackUrl, orderSettings.TradeGeckoRefreshToken);
JObject refresheObject = await returnObject;
if (refresheObject[JsonKeys.AccessToken] != null)
{
Console.WriteLine(refresheObject[JsonKeys.AccessToken].ToString());
orderSettings.TradeGeckoAccessToken = refresheObject[JsonKeys.AccessToken].ToString();
orderSettings.TradeGeckoRefreshToken = refresheObject[JsonKeys.RefreshToken].ToString();
_settingService.SaveSetting(orderSettings);
_settingService.ClearCache();
}
}
public void Execute()
{
System.Threading.Tasks.Task t = UpdateRefreshToken();
Thread.Sleep(2000);
}
}
}
从管理面板手动运行任务时,有时会产生以下错误:
Message=已经有一个打开的 DataReader 与此命令关联,必须先关闭。
我做对了吗?或者有更好的方法来做到这一点。