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

标签 c# multithreading parallel-processing console-application

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

相关文章:

c# - 加载配置文件时出错 : Access to path c:\Program Files (x86)\. .. 被拒绝

c# - 如何为 2 个不同的目标平台创建类

c++ - 深入研究 C++ 中的多线程编程时, "things to know"是什么

c++ - 在锁内对 STL 容器执行耗时操作

c - 向前移动和矩阵中的索引

c - 将内核中的两个预定义值相乘

c# - Queryable.OrderBy 对于 SQL Server 数据库不稳定吗?

c# - 我怎样才能让布局占据不同方向的屏幕空间百分比?

java - 在 Java 中使用线程同时执行多个方法

Paypal 自适应并行支付