我试图让我的FileSystemWatcher在5分钟以上没有收到任何更改后激活一些代码。
我目前的做法是在更改后调用await Task.Delay();
,希望用户完成此操作。这显然是不的方式。
所以我的问题:如何在事件触发后重置Task.Delay()?
答案 0 :(得分:3)
您无法“重置”Task.Delay
,但您可以重置计时器,使其成为解决此问题的理想选择。
以下是一个例子:
private System.Threading.Timer timer;
public void Start()
{
timer = new System.Threading.Timer(_ => fireMyCode());
restartTimer();
}
private void onFileChanged(object sender, EventArgs e)
{
restartTimer();
}
private void restartTimer()
{
timer.Change(TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));
}
但是您不必使用计时器,您仍然可以使用Task.Delay
执行其他任务:想法是等待两个任务,延迟并等待文件更改(您可以使用{ {1}}从事件“创建”任务)。
如果延迟任务首先完成,请激活您的代码。
以下是一个例子:
TaskCompletionSource