c# - 我需要关于 c# 中计时器的建议吗?
问题描述
我正在使用 c# 建立一个库系统,该系统包括以下内容:
学生可以远程预订书籍,但此预订操作仅在 24 小时内有效,如果会员在该期限内未出现,则该书籍将自动发布,如果重复 3 次,则将被禁止 15 天。
为此,我开始设置一个计时器(使用 System.Threading.Timer),但每次学生预订某本书时我都需要一个计时器,而我真的很困惑如何做到这一点。我有创建计时器列表的想法,每次预订操作发生时,我都会创建一个计时器并将其放入列表中。
private List<Timer> timerList;
private void SetUpTimer(TimeSpan alertTime)
{
DateTime current = DateTime.Now;
TimeSpan timeLeft = alertTime - current.TimeOfDay;
Timer timer = new System.Threading.Timer(x =>
{
this.doWork();
}, null, timeLeft, Timeout.InfiniteTimeSpan);
timerList.Add(timer);
}
private void doWork()
{
}
那么这是实现这个想法的好方法吗?
有没有更好的想法来实现这个?
编辑1:每次预订一本书时,我都使用数据库来放置所有信息和时间戳。
解决方案
我无法评论:(
我认为正如其他人提到的那样,这不是一个好的设计。最好是事件驱动。又名。在检查一本书是否可用时,确定它在 24 小时内被某人锁定的天气。
IE
用户 A 可以锁定一本书 1,并且您可以将此信息保存在某处,如 user2864740 所述,时间戳(在 C# DateTime 中)。例如:书1:2019-01-05 15:00
之后,可能会发生 4 件事:1. 借款人准时来 2. 借款人迟到 3. 有人来得早,试图借阅这本书 4. 有人晚 24 小时来,试图借阅这本书
每一个都可以被认为是一个事件。
这里的想法在软件中非常普遍:不要给我打电话(我可能需要/可能不需要的信息),我会在需要时给你打电话。
希望这可以帮助。
所以如果你正在开发一些管理系统,最好从数据库开始。如果只是课后练习,你甚至可以使用文件系统,查看如何在 C# 中使用 IO 相关类。
玩得开心!
推荐阅读
- ios - UIBezierpaths 没有在它们被绘制的地方绘制
- apache - 无法在 apache2 中创建 .htaccess 文件
- dart - 调用 Process.run 时如何加载 .bash_profile?
- python - pubnub asyncio 不发布数据
- docker - 如何使用 docker-compose.yml 为 Drupal 映像绑定挂载?
- javascript - Javascript 和 Ajax 每行 3 个不同的总计算无法正常工作
- javascript - Javascript - CSV 导入 UTF-8 编码
- scala - 如何解释scala混合标识符
- asp.net-mvc - 传递用户代码并返回带有填充字段的用户名
- javascript - 如何在我的减速器中使用一个变量,用一个对象设置