【发布时间】: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