我刚刚注意到,排队的回调顺序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
顾名思义,订单被保留。
有没有办法确保订单被保留?
如果不是,您建议采用什么替代实施方式?