【问题标题】:Event reentry issue. Same event running concurrently事件重入问题。同一事件同时运行
【发布时间】:2019-03-18 20:51:52
【问题描述】:

我有一个事件在很多情况下会触发很多次,但我希望在运行下一个事件之前完成一个事件。

我正在尝试创建一个加密货币交易机器人。有问题的事件是private void CoinInformation_OnNewTradeEvent(object sender, AggregateTradeEventArgs e)

由于单个事件多次触发,我一直认为它会以同步方式执行,当一个事件运行时,下一个事件在完成之前不会运行。我试过放锁,但发现这行不通。

private void CoinInformation_OnNewTradeEvent(object sender, AggregateTradeEventArgs e)
    {
        lock(myObject)
        {
            try
            {
                Decimal currentTradePrice = e.Trade.Price;

                UpdateSMA(currentTradePrice);

                TryBuy(currentTradePrice);

                TrySell(currentTradePrice);

                TryStopLoss(currentTradePrice);
            }
            catch
            {
                return;
            }


        }

    }

【问题讨论】:

  • myObject 是静态的吗?
  • 是私有静态对象 myObject = new Object();
  • 我在这里看到了类似的东西,但它是异步事件。它会产生差异吗? stackoverflow.com/a/22864286/958967
  • 当你说“下一个甚至不会运行”时,这是什么意思? lock 不会阻止多个调用者同时调用该方法。这只意味着线程将在lock 处等待,直到上一次调用释放锁。
  • 当多个调用者同时调用一个方法时,我认为第一个调用的方法必须在执行第二个方法之前完成。但好像不是这样的。

标签: c# asynchronous events


【解决方案1】:

抱歉,我的 TryBuy 和 TrySell 似乎是异步的,我没有等待它们,因此有重新进入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多