贝利信息

c# Array.Sort 是线程安全的吗

日期:2026-01-06 00:00 / 作者:幻夢星雲
Array.Sort 不是线程安全的:并发调用同一数组实例会导致数据错乱、越界异常或崩溃;官方明确标注其静态和实例方法均不保证线程安全,需通过独立副本、lock 或并行LINQ等方式保障安全。

Array.Sort 不是线程安全的

直接回答:对同一个 Array 实例并发调用 Array.Sort 会导致未定义行为,包括数据错乱、越界异常甚至进程崩溃。.NET 官方文档明确标注 Array.Sort 的静态重载「不是线程安全的」,实例方法(如 Array.Sort(T[]))同样不保证线程安全。

哪些场景会出问题

常见误用包括:

这类情况不会抛出明确的「线程不安全」异常,而是表现为排序结果错误、IndexOutOfRangeException 或偶尔的 ArgumentException(例如“array was modified”)。

如何安全地并发排序

没有银弹,但有明确可行路径:

为什么 .NET 不让它线程安全

根本原因在于性能与语义权衡:

真正容易被忽略的是:即使你只读数组,只要另一个线程正在调用 Array.Sort,读操作也未必看到一致状态——因为排序过程中的中间态是公开可见的。