当前位置: 首页 > 编程语言 > C#

Task.Wait(int)任务没有完成超时会停止任务吗?分享

时间:2023-04-10 12:43:18 C#

Task.Wait(int)没有完成任务就超时了,会停止任务吗?我有一个任务想在一秒钟内运行,但如果它花费的时间超过几秒钟,我想取消该任务。例如:Taskt=newTask(()=>{while(true){Thread.Sleep(500);}});t.开始();t.等待(3000);注意等待3000毫秒后,等待到超时。超时到期时任务是否取消或任务仍在运行?如果要取消Task,需要在创建Task时传入CancellationToken。这将允许您从外部取消任务。如果需要,您可以绑定取消绑定到计时器。要创建带有取消令牌的任务,请参见以下示例:vartokenSource=newCancellationTokenSource();vartoken=tokenSource.Token;vart=Task.Factory.StartNew(()=>{//做一些工作if(token.IsCancellationRequested){//在这里根据需要清理....}token.ThrowIfCancellationRequested();},token);要取消任务,请在tokenSource上调用Cancel()。Task.Wait()等待任务完成指定的时间,并返回任务是否在指定时间(或更早)完成。任务本身没有被修改,也不依赖于await。阅读精彩系列:.NET中的并行性、.NET中的并行性–第10部分、PLINQ中的取消和ReedCopsey的并行类以及:.NET4取消框架/并行编程:任务取消检查以下代码:varcts=newCancellationTokenSource();varnewTask=Task.Factory.StartNew(state=>{vartoken=(CancellationToken)state;while(!token.IsCancellationRequested){}token.ThrowIfCancellationRequested();},cts.Token,cts.Token);如果(!newTask.Wait(3000,cts.Token))cts.Cancel();该任务仍在运行,直到您明确告诉它停止或循环结束(这永远不会发生)。waittosee的返回值可以查看:(来自http://msdn.microsoft.com/en-us/library/dd235606.aspx)返回值类型:System.Boolean如果任务在指定时间内执行完毕,然后是真的;否则,假的。否则,是的。超时到期时任务是否取消或任务仍在运行?不。传递给Task.Wait的超时是等待而不是任务。以上是C#学习教程:Task.Wait(int)没有完成任务超时会停止任务吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: