首页 > 解决方案 > 检查是否过了 x 秒,如果不等到 x 秒

问题描述

我正在努力解决一个问题。这是针对交易机器人的,在交易所中,有一个规则。交易后不能交易,如果要交易,必须在第一次交易后等待 5 秒。5 秒后,交易由您决定,买、卖或什么都不做。

我有秒表,我打电话aFunction,功能结束后,计时器将启动,我打电话bFunction,如果计时器值<5秒,它应该等到5秒过去。

我做了一个while(true),我可以检查if(timer>5),但它会吃 cpu,如果它是单核,它将在 5 秒内无限循环。

有什么c#方法吗?或任何想法?对不起我的英语和任何帮助表示赞赏。

更新

如果之前没有交易(5 秒或更多),它不应该等待 5 秒。所以线程睡眠或定时器不起作用。

标签: c#.net

解决方案


这是一个基于计时器的解决方案。需要注意的重要事项是

  • .NET 中有几个计时器类。选择最适合您的。

  • 了解Thread计时器触发的内容非常重要。

  • 计时器不会完全按照您设置的时间间隔触发

     public class Trade
     {
         public string Symbol { get; }
         public DateTime TradeTimeUTC { get; }
     }
    
     public class Order
     {
         public string Symbol { get; }
     }
    
     public void SendOrder(Order order)
     {
         //Find most recent trade for this order, out of scope here
         var trade = GetMostRecentTrade(order);
         var differenceInTime = DateTime.UtcNow - trade.TradeTimeUTC;
         if (differenceInTime.TotalSeconds >= 5)
         {
             ActuallySendOrder(order);
             return;
         }
         System.Timers.Timer timer = new System.Timers.Timer()
         {
             AutoReset = false,
             Interval = differenceInTime.TotalMilliseconds
         };
         //You're on a ThreadPool thread when this fires, adjust accordingly
         timer.Elapsed += (s, e) => { ActuallySendOrder(order); };
         timer.Start();
     }
    

推荐阅读