C# Dictionary同時書き込み問題の解決策と実装
C#の中で、並行性によるデータロスの問題を解決する方法として、スレッドセーフなコレクションクラスを使用することができます。一般的な方法の一つは、ConcurrentDictionaryクラスを使用することで、スレッドセーフなキーと値のコレクションを提供します。
以下是一个简单的示例代码,展示如何使用ConcurrentDictionary来解决并发丢失数据的问题:
using System;
using System.Collections.Concurrent;
using System.Threading.Tasks;
class Program
{
static ConcurrentDictionary<int, string> keyValuePairs = new ConcurrentDictionary<int, string>();
static void Main()
{
Task[] tasks = new Task[10];
for (int i = 0; i < 10; i++)
{
int key = i;
tasks[i] = Task.Run(() =>
{
keyValuePairs.TryAdd(key, $"Value {key}");
});
}
Task.WaitAll(tasks);
foreach (var pair in keyValuePairs)
{
Console.WriteLine($"Key: {pair.Key}, Value: {pair.Value}");
}
}
}
上記の例では、ConcurrentDictionaryを使用してキーと値のペアを保存し、複数のスレッドで並行してデータを追加します。ConcurrentDictionaryはスレッドセーフであるため、並行操作中にデータが失われることはありません。最後に、すべてのキーと値のペアを出力します。
ConcurrentDictionary以外にも、ConcurrentQueueやConcurrentStackなど、他のスレッドセーフなコレクションクラスがあります。適切なコレクションクラスを選択して、並行してデータが失われる問題を解決することができます。