即使控制台应用程序退出,也能保持线程活力。

问题描述 投票:1回答:1

我有一个用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 来创建线程?

c# multithreading parallel-processing console-application
1个回答
2
投票

一个控制台应用程序要在窗口关闭时杀死所有线程。 总是这样。 这是没有办法的。 控制台窗口直接与进程相连。

你可能希望使用一个Windows应用程序,这样你就可以对主应用程序循环进行更精细的控制。 这可以是一个Windows服务或WinFormWPF类型的应用程序(如果你不想要的话,它甚至不需要有一个UI)。

如果你想要一个仍然显示控制台的Windows应用程序--这有点古怪,但你可以找到一个例子来说明如何做到这一点。此处.

© www.soinside.com 2019 - 2024. All rights reserved.