如何在事件触发后重置Task.Delay()?

时间:2015-10-21 12:43:14

标签: c# delay reset filesystemwatcher

我试图让我的FileSystemWatcher在5分钟以上没有收到任何更改后激活一些代码。

我目前的做法是在更改后调用await Task.Delay();,希望用户完成此操作。这显然是的方式。

所以我的问题:如何在事件触发后重置Task.Delay()?

1 个答案:

答案 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