2017-07-17 4 views
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が既にあります最初。

私はそれを正しくやっていますか?またはこれを行うにはより良い方法があります。

+0

あなたが本当にそこに 'Thread.Sleep'を持っていますか? – Fabiano

+0

はい、これがなければ、 '' UpdateRefreshToken''は決してヒットしません。私はそれをすべて間違ってやっているかもしれません。私は非同期のものはよくありません。 – lukai

答えて

関連する問題