我正在使用C#中的Tasks。我有一种情况可以在Task中运行我的代码。但是有时由于某些算法问题,该代码可能会进入死锁状态。 我正在尝试以一种
-我将开始一个任务
-等待一段时间以完成任务执行
-如果任务没有在特定时间内执行,我将杀死该任务
这是我需要实现的。示例代码如下。
问题是,即使我取消了任务,它也正在执行而没有退出。有人可以帮忙吗?
public static class MyTest
{
public static void StartTask()
{
CancellationTokenSource tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
Task task = new Task(() => TaskMethod(), token);
task.Start();
if (!task.Wait(1000))
{
tokenSource.Cancel();
Console.WriteLine("Cancelled");
}
}
public static void TaskMethod()
{
while (true)
{
Thread.Sleep(2000);
Console.WriteLine("Haiiiiiii");
}
}
}```
答案 0 :(得分:0)
TaskMethod()
必须返回Task
,而不是Thread.Sleep()
使用await Task.Delay()
,在这种情况下,TaskMethod()
必须标记为async
。
答案 1 :(得分:0)
问题不是僵局。您的任务将永远不会响应取消请求。
任务没有被魔术终止,您应该检查IsCancellationRequested
的{{1}}属性,将其从局部变量更改为字段,以便TaskMethod能够访问它。 / p>
尝试一下:
CancellationTokenSource