我正在使用这样的代码:
private Task[] tasks;
private volatile bool stayConnected;
....
tasks[i] = Task.Factory.StartNew(() =>
{
while (stayConnected) {
...
}
}
....
public void Disconnect()
{
stayConnected = false;
Task.WaitAll(tasks);
}
我的代码不起作用 - 任务永远不会结束。我猜他们由于某种原因没有收到新stayConnected = false
的价值,可能只是声明字段volatile
是不够的。
指示任务停止工作的正确方法是什么?我不想“杀死”任务,而是想“请求”完成任务。
我发现这篇文章建议使用 CancellationToken,我应该使用它还是您可以提出更好的建议?我可以将一个 CancellationToken 用于多个任务吗?
同样有趣的是为什么我的初始代码不起作用。