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

编程入门 行业动态 更新时间:2024-10-25 20:19:31
本文介绍了事件触发后如何重设Task.Delay()?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我试图让FileSystemWatcher超过5分钟未收到任何更改后触发一些代码.

I am trying to let some code fire after my FileSystemWatcher hasn't received any changes for more then 5 minutes.

我当前的方法是在更改后调用 await Task.Delay(); ,希望届时用户已完成.显然,这不是不是的方法.

My current approach is to call a await Task.Delay(); after a change, hoping the user is done by then. This obviously is not the way to go.

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

So my question: How to reset a Task.Delay() after a event fired?

推荐答案

您不能重置" Task.Delay ,但是您可以重置计时器,这使其成为解决问题的理想之选这个问题.

You can't "reset" a Task.Delay, but you can reset a timer which makes it an ideal candidate to solve this problem.

这是一个例子:

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 与其他任务一起使用:这个想法是等待两个任务,即延迟和等待文件更改(您可以使用 TaskCompletionSource 从事件中创建"任务).如果延迟任务首先完成,请触发您的代码.

But you don't have to use timers, you can still use Task.Delay with an additional task: the idea is to wait on two tasks, the delay and waiting for the files to change (you can use TaskCompletionSource to "create" a task from an event). If the delay task completes first, fire your code.

这是一个例子:

TaskCompletionSource<object> fileChanged = new TaskCompletionSource<object>(); private void onFileChanged(object sender, EventArgs e) { fileChanged.TrySetResult(null); } private async Task endlessLoop() { while (true) { await handleFilesNotChanged(); } } private async Task handleFilesNotChanged() { Task timeout = Task.Delay(TimeSpan.FromMinutes(5)); Task waitForFile = fileChanged.Task; if (await Task.WhenAny(timeout, waitForFile) == timeout) { fireMyCode(); } fileChanged = new TaskCompletionSource<object>(); }

更多推荐

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

本文发布于:2023-11-08 16:20:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1569867.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:重设   事件   Delay   Task

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!