c# - 如果命令未在特定时间内完成,则会发出警报
问题描述
我的目标是在命令未完成后 10 分钟发送一条消息,然后每隔 1 分钟发送一次。起初我尝试过这样的事情:
namespace MinecraftClient.ChatBots
{
public class WallTimer
{
public static Timer wallTimer;
internal static Task StartTimer()
{
wallTimer = new Timer()
{
Interval = 60000,
AutoReset = true,
Enabled = true
};
wallTimer.Elapsed += OnTimerTicked;
return Task.CompletedTask;
}
private static void OnTimerTicked(object sender, ElapsedEventArgs e)
{
Program.SendAlertDiscord();
}
}
}
我打算在发送命令时停止计时器,等待 10 分钟,然后再次启动计时器。我在定义使用该timer.Stop
函数时遇到了麻烦,因为我认为它不适用于System.Timers
. 如果有人有更有效的方法在 10 分钟后发送这些警报,我也愿意接受建议。
解决方案
您不需要停止计时器的要求。Timer 有一种方法Change
,当任务再次结束时允许,您可以根据需要根据您的业务进行更改。您可以修改的示例可以是
wallTimer= new Timer(new TimerCallback(OnTimerTicked));//OnTimerTicked is function for anything to do when timer is done
DateTime scheduledTime = DateTime.Now.AddMinutes(10);//Can be configurable
TimeSpan timeSpan = scheduledTime.Subtract(DateTime.Now);
int dueTime = Convert.ToInt32(timeSpan.TotalMilliseconds);
wallTimer.Change(dueTime, Timeout.Infinite);
您可以根据设置的可配置条件编写每 10 分钟或 1 分钟调用一次的递归函数
您可以参考的一些示例是:
http://www.nullskull.com/q/10075796/create-an-infinite-loop-in-a-windows-service.aspx http://www.informit.com/articles/article.aspx?p=415982&seqNum =2
推荐阅读
- git - 如何组合这些 git 命令?
- angular - Angular 7 - 在所有单个子组件都准备好数据之后加载父组件
- php - PHP遍历所有可能的三张已发牌与死牌的组合
- cygwin - 如何在cygwin中运行.in(点'in')文件
- qt - ListElement:无法使用脚本处理属性值错误
- python - 如何将列表插入特定元素?
- hyperledger-fabric - 身份的主体反序列化失败(MSP DMCCMSP 未知)
- android - 创建一个 POSTagger 模型
- c++ - |9|错误:非静态数据成员“Matrix::row”的使用无效|9|错误:数组边界在“]”标记之前不是整数常量|
- javascript - 试图让 div 在 keydown 时在屏幕上移动