J'écrivais une tâche planifiée pour l'actualisation du jeton d'accès à partir de tradeGecko. Voici le code pour la tâche:Appel d'une méthode asynchrone dans nopCommerce 3.9 Tâches planifiées
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);
}
}
}
Pendant l'exécution de la tâche manuellement à partir du panneau d'administration parfois produit l'erreur suivante:
message = Il existe déjà un DataReader ouverte associée à cette commande qui doit être fermé premier.
Est-ce que je le fais bien? OU il y a mieux à faire.
Avez-vous vraiment un 'Thread.Sleep' là? – Fabiano
oui, sans cela le '' UpdateRefreshToken'' ne sera jamais frappé. Peut-être que je fais tout faux. Je ne suis pas bon en ce qui concerne les choses asynchrones. – lukai