【问题标题】:Calling an asynchronous method in nopCommerce 3.9 Schedule Task在 nopCommerce 3.9 调度任务中调用异步方法
【发布时间】:2017-07-17 10:16:20
【问题描述】:

我正在编写一个计划任务,用于从 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 与此命令关联,必须先关闭。

我做得对吗?或者有更好的方法来做到这一点。

【问题讨论】:

  • 你真的有Thread.Sleep吗?
  • 是的,没有这个 UpdateRefreshToken 永远不会被击中。可能是我做错了。我不擅长异步的东西。

标签: asp.net nopcommerce nopcommerce-3.90


【解决方案1】:

请在连接字符串中添加此 MultipleActiveResultSets=True。

请参阅此链接了解更多信息。

https://www.nopcommerce.com/boards/t/16243/there-is-already-an-open-datareader-error-on-25.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 2015-09-11
    • 2015-01-09
    • 2018-10-10
    相关资源
    最近更新 更多