C# 如何停止在后台运行的第二个线程

C# 如何停止在后台运行的第二个线程,c#,asynchronous,dispatcher,C#,Asynchronous,Dispatcher,我创建了一个应用程序,每次下载一个文件。我使用了一种方法,该方法使用while循环运行异步任务,直到用户发出某个信号打破循环(标志)。我可以随时停止循环,但我注意到第二个线程仍然在后台运行(我相信)。我的结论来自Visual Studio,它显示输出的频率与我给任务的X时间一样。延迟(X): 线程0x8644已退出,代码为0(0x0) 线程0x7254已退出,代码为0(0x0) 线程0x9a14已退出,代码为0(0x0) 线程0x7558已退出,代码为0(0x0) 这是在循环停止之后。我分析

我创建了一个应用程序,每次下载一个文件。我使用了一种方法,该方法使用while循环运行异步任务,直到用户发出某个信号打破循环(标志)。我可以随时停止循环,但我注意到第二个线程仍然在后台运行(我相信)。我的结论来自Visual Studio,它显示输出的频率与我给任务的X时间一样。延迟(X):

  • 线程0x8644已退出,代码为0(0x0)
  • 线程0x7254已退出,代码为0(0x0)
  • 线程0x9a14已退出,代码为0(0x0)
  • 线程0x7558已退出,代码为0(0x0)
这是在循环停止之后。我分析了这个行为,我越是打开自动下载,使用的线程就越多,旧的线程就保持活动状态(我可能错了)。有人能解释一下幕后发生了什么吗?如果有可能阻止一个线程,我也会打破这个循环

// Task that runs every 2 seconds
public void Checker()
{
    Task.Run(async () =>
    {
        while (true)
        {
            if (Flag)
            {
                Dispatcher.Thread.Suspend(); // This did not work, but you get the idea
                break;
            }

            Dispatcher.Invoke(() =>
            {
               // Do something in the UI thread
            });
            await Task.Delay(2000);
        }
    });
}

检查
Thread.Suspend()
中的取消令牌是过时的methodEldar,感谢您为我指明了正确的方向。如果您使用
CancellationToken
,您可以设置
IsCancellationRequested
,如Eldar所述。随着工作负载的变化,线程池会自动调整线程的数量,这是很自然的。你真的有问题吗?或者你只是觉得你可能有问题,因为这些信息?