gpt4 book ai didi

c# 使用 System.Timers 时取消任务

转载 作者:行者123 更新时间:2023-12-05 02:13:47 24 4
gpt4 key购买 nike

我不确定如何最好地取消运行系统计时器的任务。在下面的代码中,每 60 分钟计时器将运行一次,然后运行另一个方法 (CheckFileOverflow) 用于检查系统日志 txt 的文件大小。文件

理想情况下,可以通过单击按钮或调用取消的其他方法来取消计时器。只要软件正在运行,定时器就可以有效地运行,但是当用户最终关闭软件时,我希望能够以负责任的方式取消任务,即不冒正在进行的线程池的风险资源在后台挥之不去。

我花了很多时间阅读有关取消标记的内容,但仍然不明白:(

public void SystemEventLoggerTimer()
{
SysEvntLogFileChckTimerRun = true;

Task.Run(() =>
{
System.Timers.Timer timer = new System.Timers.Timer
{ Interval = 1000 * 60 * 60 };
timer.Elapsed += new ElapsedEventHandler(CheckFileOverflow);
timer.Start();
});
}

最佳答案

我建议您使用 Microsoft 的 Reactive Framework(又名 Rx)- 只是 NuGet System.Reactive

然后你这样做:

IDisposable subscription =
Observable
.Interval(TimeSpan.FromHours(1.0))
.Subscribe(_ => CheckFileOverflow());

当您想取消订阅时,只需调用 subscription.Dispose()

Rx 是抽象定时器、事件、任务、异步操作等的理想选择。

关于c# 使用 System.Timers 时取消任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54612247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com