C#调度代码以便稍后运行

本文关键字:运行 调度 代码 | 更新日期: 2023-09-27 18:28:59

如何调度代码以便以后运行?类似于:

ThreadPool.QueueUserWorkItem(callback, TimeSpan.FromSeconds(1)); // call callback() roughly one second from now

C#调度代码以便稍后运行

您可以尝试以下操作:

System.Threading.Timer _timeoutTimer;
//...
int timeout = (int)TimeSpan.FromSeconds(1).TotalMilliseconds;
_timeoutTimer = new System.Threading.Timer(OnTimerElapsed, 
    null, timeout, System.Threading.Timeout.Infinite);
//...
void OnTimerElapsed(object state) {
     // do something
    _timeoutTimer.Dispose();
}

您可以使用Timer类进行此操作。

只需在回调函数中休眠即可。如果您使用的是Threadpool或Task,那么在开始之前,它可能需要比您发送的实际时间跨度更长的时间;这是因为如果线程排队,它不会立即开始执行。

public static void MyCallback(object delay)
{
    Thread.Sleep(((TimeSpan)delay).TotalMilliseconds);
    ... code ...
}

您可以使用匿名方法并使用较低级别的线程构造来内联执行上述操作。

new Thread(() => {
    Thread.Sleep(delayMilliseconds);
    callbackFunction();
}).Start();