我有一个用 C# 编写的控制台应用程序,它无休止地运行,看起来像这样:
class Program
{
static void Main(string[] args)
{
while(true)
{
var listOfIds = GetItemIds();
Parallel.ForEach(listOfIds,
new Parallel { MaxDegreeOfParallelism = 15}, th => DoWork(th));
Console.WriteLine("Iteration Complete");
}
}
static void DoWork(int id)
{
//do some work and save data
}
static List<int> GetItemIds()
{
//return a list of ints
}
}
当线程处于DoWork
时,它正在处理数据、修改数据并存储数据。该应用程序等待所有完成,然后再次进行新的迭代。
现在,如果控制台应用程序关闭,线程似乎没有完成它们的工作并与控制台应用程序一起死亡。我认为使用 Parallel
创建的线程独立于主线程。即使我退出控制台应用程序,有没有办法让线程完成它们的工作?我应该使用不同的东西而不是 Parallel
来创建线程吗?
最佳答案
控制台应用程序将在窗口关闭时终止所有线程。总是。没有办法解决这个问题。控制台窗口直接链接到进程。
您可能希望使用 Windows 应用程序,这样您可以对主应用程序循环进行更精细的控制。这可能是 Windows 服务或 WinForm/WPF 类型的应用程序(如果您不需要,它甚至不需要真正的 UI)。
如果您想要一个仍然显示控制台的 Windows 应用程序 - 这有点不靠谱,但您可以找到一个如何做到这一点的示例 here .
关于c# - 即使控制台应用程序退出,线程也保持事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52722920/