如何调度代码以在以后运行?就像是 :
ThreadPool.QueueUserWorkItem(callback, TimeSpan.FromSeconds(1)); // call callback() roughly one second from now
You can try the following:
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();