我正在制作一个机器人,其中有多个任务。现在,我希望用户能够停止/启动特定任务。有什么办法可以通过taskid停止任务?我的想法是,我可以捕获任务的ID,并且当用户单击stop时,该taskID将停止/执行。谢谢您的帮助! :)
while(true)
{
if (token.IsCancellationRequested)
{
break;
}
DoAPieceOfWork();
}
这里有两篇带有代码示例的文章:
无法从外部来源取消TPL任务。话虽如此,要做的方法是将CancellationToken
传递给您的Task
。您可以检查此令牌的属性IsCancellationRequested
并引发异常,从而终止任务。
现在为了触发该属性更改,您需要创建一个CancellationTokenSource
,将其CancellationToken
传递给目标Task
。
[当您想终止任务时,可以使用CancellationTokenSource
的Cancel
方法作为触发器,并更改上述属性。
可以找到更多信息here!
public void Initialize()
{
CancellationTokenSource cts=new CancellationTokenSource();
Task myTask=Task.Run(()=>Worker(cts.Token),cts.Token);
TriggerLoop(cts);
}
public void TriggerLoop(CancellationTokenSource cts)
{
while(true)
{
if(Console.ReadKey().Key=='A')
{
cts.Cancel();
}
}
}
public void Worker(CancellationToken token)
{
while(true)
{
//do your stuff
if(token.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();
}
}
}