17年プログラマをやっていて、いまさら i++ がスレッドセーフじゃないことを知った 1 ことを反省しての記事です。 ざっくりいうと C#のインクリメント演算子はスレッドセーフではありません。 スレッドセーフを求める場合は、System.Threading.Interlocked.Incrementを利用しましょう。 System.Threading.Interlocked.Incrementがスレッドセーフたる理由を調べてみた。 本文 検証してみる 以下のMSTestを実行してみたところ、テストはエラーになりました。 [TestMethod] public void TestIncrementersThreadSafe() { var tasks = new List<Task>(); int counter = 0; for (int i = 0; i < 250; i++) { ta