gpt4 book ai didi

c# - 即使控制台应用程序退出,线程也保持事件状态

转载 作者:行者123 更新时间:2023-12-03 12:46:41 24 4
gpt4 key购买 nike

我有一个用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com