我有一个用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服务或WinFormWPF类型的应用程序(如果你不想要的话,它甚至不需要有一个UI)。
如果你想要一个仍然显示控制台的Windows应用程序--这有点古怪,但你可以找到一个例子来说明如何做到这一点。此处.