拍卖计时器在 Asp.net webAPI 中没有按预期工作

Posted

技术标签:

【中文标题】拍卖计时器在 Asp.net webAPI 中没有按预期工作【英文标题】:Auction Timer is not working as expected in Asp.net webAPI 【发布时间】:2018-08-31 07:57:26 【问题描述】:
public class AuctionTimer : IDisposable

    public static readonly ConcurrentDictionary<string, AuctionTimer> Timers;

    private readonly Timer timer;

    static AuctionTimer()
    
        Timers = new ConcurrentDictionary<string, AuctionTimer>();
    

    private AuctionTimer(string AuctionID, int ExecutionTime)
    
        this._AuctionID = AuctionID;
        timer = new Timer();
        TimeCount = ExecutionTime;
        timer.Interval = new TimerUtil().getAuctionInterval();
        timer.Elapsed += (s, e) => MonitorElapsedTime();
        timer.Start();
    

    private int TimeCount  get; set; 

    private string _AuctionID  get; set; 

    public static void StartTimer(string AuctionID, int ExecutionTime)
    
        var newTimer = new AuctionTimer(AuctionID, ExecutionTime);
        if (!Timers.TryAdd(AuctionID, newTimer))
        
            newTimer.Dispose();
        
    

    public static void StopTimer(string AuctionID)
    
        AuctionTimer oldTimer;
        if (Timers.TryRemove(AuctionID, out oldTimer))
        
            oldTimer.Dispose();
        
    


    public void Dispose()
    
        // Stop might not be necessary since we call Dispose
        timer.Stop();
        timer.Dispose();
    

    private void MonitorElapsedTime()
    
        if (TimeCount == new TimerUtil().getAuctionInterval())
        
            StopTimer(_AuctionID);
            //do the other process in db 
        
        else
        
            TimeCount++;
        
    

以下是我的拍卖计时器的代码,我在这里要做的是进行拍卖,存储开始和结束日期,所以假设拍卖将持续 5 小时,因此结束日期将是当前时间的 5 小时我在存储拍卖的结束日期后立即启动拍卖计时器,它按预期工作,但我现在面临的问题是计时器从结束时间大约延迟 2.3 分钟,这意味着假设的过程拍卖到期后立即运行延迟了 2.3 分钟,我不确定我在这里缺少什么。

【问题讨论】:

这是否在您的 WebAPI 项目中运行?如果没有某种调度引擎,这不太可能工作。 @DavidG 是在 WebAPI 项目中运行 @OsamaAftab new TimerUtil().getAuctionInterval(); 的值是多少(←这也不是一个好习惯 1000 即 1 秒 @OsamaAftab 我目前在我的服务器上运行 300 个计时器,所有时间都在 -+ 10 毫秒内。你现在有多少个计时器 【参考方案1】:

我能够使用this 框架解决这个问题。

【讨论】:

以上是关于拍卖计时器在 Asp.net webAPI 中没有按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

用于没有 CORS 的 SPA 的 ASP.NET WebApi

ASP.Net WebAPI 返回列表中的空对象

Asp.Net MVC WebApi CORS 请求失败 - 没有建议的解决方案影响结果

ASP.NET Core中为指定类添加WebApi服务功能

没有 MediaTypeFormatter 可用于从 asp.net mvc webapi 中媒体类型为“text/html”的内容中读取“IEnumerable`1”类型的对象

Asp.net 中的全局计时器