如何添加更多毫秒延迟延迟var c#

时间:2018-03-06 10:46:21

标签: c#

我想在执行等待

时在延迟变量中添加更多延迟

示例:

private System.Threading.Tasks.Task delayVar; //Delay var

private async void createDelay() //First function
{
  delayVar = System.Threading.Tasks.Task.Delay(milliseconds);
  await delayVar;
}
private void addDelay() //Second function
{
  delayVar.Milliseconds +=5000;
}

感谢。

1 个答案:

答案 0 :(得分:5)

您无法“重置”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执行其他任务:想法是等待两个任务,延迟并等待文件更改(您可以使用TaskCompletionSource来“创建“事件中的任务”。如果延迟任务首先完成,请激活您的代码。

以下是一个例子:

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>();
}