如何在死锁状态下杀死任务

时间:2020-04-03 08:51:15

标签: c# multithreading task

我正在使用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");
            }
        }

    }```

2 个答案:

答案 0 :(得分:0)

TaskMethod()必须返回Task,而不是Thread.Sleep()使用await Task.Delay(),在这种情况下,TaskMethod()必须标记为async

答案 1 :(得分:0)

问题不是僵局。您的任务将永远不会响应取消请求。

任务没有被魔术终止,您应该检查IsCancellationRequested的{​​{1}}属性,将其从局部变量更改为字段,以便TaskMethod能够访问它。 / p>

尝试一下:

CancellationTokenSource
相关问题