0
私はtradeGeckoからアクセストークンをリフレッシュするスケジュールタスクを作成していました。ここでのタスクのためのコードがあります:nopCommerceで非同期メソッドを呼び出す3.9スケジュールタスク
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);
}
}
}
管理パネルから手動でタスクを実行しながら、時にはそれが次のエラーを生成します。
メッセージ=閉じる必要があります。このコマンドに関連付けられているオープンDataReaderが既にあります最初。
私はそれを正しくやっていますか?またはこれを行うにはより良い方法があります。
あなたが本当にそこに 'Thread.Sleep'を持っていますか? – Fabiano
はい、これがなければ、 '' UpdateRefreshToken''は決してヒットしません。私はそれをすべて間違ってやっているかもしれません。私は非同期のものはよくありません。 – lukai