我在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”中时,它正在处理数据,对其进行修改并进行存储。该应用程序等待所有操作完成,然后再次进行新的迭代。
现在,如果关闭了控制台应用程序,则线程似乎无法完成其工作并因控制台应用程序而终止。 我认为使用“并行”创建的线程独立于主线程。即使我退出控制台应用程序,也可以使线程完成其工作吗?我应该使用其他东西而不是“并行”来创建线程吗?
答案 0 :(得分:1)
关闭窗口后,控制台应用程序将终止所有线程。总是。没有办法解决。控制台窗口直接链接到该过程。
您可能希望使用Windows应用程序,它将对主应用程序循环有更精细的控制。这可能是Windows Service或WinForm / WPF类型的应用程序(如果您不需要的话,甚至不需要UI)。
如果您希望Windows应用程序仍然显示控制台-这有点不方便,但是您可以找到一个示例here。