我在c#中取消任务时遇到问题,任务[0]没有停止执行。 这是代码。
var tokenSource = new CancellationTokenSource();
var token = tokenSource.Token;
Task[] tasks = new Task[2];
tasks[0] = Task.Run(() => {
SomeClass Object1 = new SomeClass();
if (tasks[1].IsCompleted)
{
tokenSource.Cancel();
}
},token);
tasks[1] = Task.Run(() =>
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
});
答案 0 :(得分:1)
首先,您应该运行tasks[1];
其次,您应该检查循环中是否已完成task[1]
并从任务返回,您的示例中不需要CancellationToken
:
Task[] tasks = new Task[2];
// run task[1]
tasks[0] = Task.Run(() => {
SomeClass Object1 = new SomeClass();
while (true)
{
if(tasks[1].IsCompleted)
{
return;
}
}
},token);
答案 1 :(得分:0)
我解决了这个问题,只需添加“Task.WaitAll(tasks [1]);”在代码的最后。
Task[] tasks = new Task[2];
tasks[0] = Task.Run(() =>
{
SomeClass Object1 = new SomeClass();
if (tasks[1].IsCompleted)
{
tokenSource.Cancel();
}
});
tasks[1] = Task.Run(() =>
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
});
Task.WaitAll(tasks[1]);
感谢大家的投入。