c# - ThreadPool.QueueUserWorkItem - 订单未保留?

标签 c# .net multithreading threadpool

我刚刚注意到通过 ThreadPool.QueueUserWorkItem 排队的回调顺序不是确定性的,它肯定不是回调传入的顺序。

这可以用下面的简单程序来验证:

    private static void Main()
    {
        for (var i = 0; i < 10; ++i)
            ThreadPool.QueueUserWorkItem(Console.Write, i + " ");

        Thread.Sleep(1000);
    }

一次运行的输出是:

0 3 8 9 1 2 5 4 6 7

顾名思义,顺序是保留的。

有没有办法确保顺序被保留?
如果不是,您建议采用哪种替代实现方式?

最佳答案

如果您希望任务串行运行但在与调用线程不同的线程上,那么您应该查看 EventLoopSchedulerReactive Extensions .它允许您在特定工作线程上安排工作单元。

关于c# - ThreadPool.QueueUserWorkItem - 订单未保留?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14505929/

相关文章:

java - 数据源与简单连接数据库

c# - 处理文件的并发读/写

python - 关于 fit_generator()/fit() 和线程安全

java - Android 应用程序 - 恢复线程

具有数据格式或模式的 C# DateTime.ToString

c# - 如何将mysql的结果添加到标签或字符串变量?在 c# 中

c# - 为什么组合框在创建时会加倍其项目?

c# - 如何重定向到 asp.net core razor 页面(无路由)

c# - 在 IEnumerable 上使用 C# 实现的 PowerShell 中的 GetEnumerator

java - 在 Web 容器内部,如何创建/管理具有相同引用变量的同一类的多个对象