拍卖计时器在 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 项目中运行 @OsamaAftabnew TimerUtil().getAuctionInterval();
的值是多少(←这也不是一个好习惯
1000 即 1 秒
@OsamaAftab 我目前在我的服务器上运行 300 个计时器,所有时间都在 -+ 10 毫秒内。你现在有多少个计时器
【参考方案1】:
我能够使用this 框架解决这个问题。
【讨论】:
以上是关于拍卖计时器在 Asp.net webAPI 中没有按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
用于没有 CORS 的 SPA 的 ASP.NET WebApi
Asp.Net MVC WebApi CORS 请求失败 - 没有建议的解决方案影响结果
没有 MediaTypeFormatter 可用于从 asp.net mvc webapi 中媒体类型为“text/html”的内容中读取“IEnumerable`1”类型的对象