Imr*_*zvi 2 c# multithreading .net-4.0
我有一个Windows服务,它启动时启动任务
这个任务有一个while循环,在执行一次迭代后,它会进入睡眠状态5分钟.
当我停止服务时,首先取消任务,然后执行其他一些操作
如果任务处于睡眠状态,只有在它被唤醒时它才被取消,我希望它被取消,即使它正在睡觉而且不想等待它被唤醒.
以下是代码
Task controllerTask = Task.Factory.StartNew(() =>
{
var interval = 300;
while(true)
{
if (cancellationToken.IsCancellationRequested)
break;
Thread.Sleep(interval * 1000);
if (cancellationToken.IsCancellationRequested)
break;
//SOME WORK HERE
}
}, cancellationToken);
Run Code Online (Sandbox Code Playgroud)
有什么办法吗?
编辑:我无法使用Task.Delay,我在System.Threading.Tasks.Task命名空间中找不到它,因为我使用的是.Net Framework 4.0而不是4.5
有没有其他更好的解决方案适用于4.0.
Tho*_*que 11
用Task.Delay而不是Thread.Sleep.它需要一个CancellationToken参数,因此您可以在延迟结束之前中止它.
如果您使用的是异步代码,可以这样写:
await Task.Delay(duration, cancellationToken);
Run Code Online (Sandbox Code Playgroud)
如果是同步代码,您可以等待任务:
Task.Delay(duration, cancellationToken).Wait();
Run Code Online (Sandbox Code Playgroud)