ID をキーとして、キューを値として含む辞書を使用しています。1 つのスレッドがキューに書き込み、別のスレッドがキューから読み取るため、.NET 4.0 で導入された同時実行構造を使用する必要があります。この一環として、キューを埋めるためだけにテスト アプリケーションを作成しようとしましたが、約 10 秒後にタイマーが停止するという問題に遭遇しました。キャッチするもの、エラーメッセージ、または何が間違っているのかについてのヒントを与えるものがないため、その理由が本当にわかりません。
タイマーが約 10 秒後に停止する理由を誰かが説明してくれませんか? これを 2 台の異なるコンピューターで試しました (どちらも Visual Studio 2012 を使用していますが、.NET Framework 4.0 を使用しています)。
class Program {
private readonly ConcurrentDictionary<int, ConcurrentQueue<TestObject>> _pipes =
new ConcurrentDictionary<int, ConcurrentQueue<TestObject>>();
static void Main() {
Program program = new Program();
program.Run();
Console.Read();
}
private void Run() {
_pipes[100] = new ConcurrentQueue<TestObject>();
_pipes[200] = new ConcurrentQueue<TestObject>();
_pipes[300] = new ConcurrentQueue<TestObject>();
Timer timer = new Timer(WriteStuff, null, 0, 100);
}
private void WriteStuff(object sender) {
for (int i = 0; i < 5; i++) {
foreach (KeyValuePair<int, ConcurrentQueue<TestObject>> pipe in _pipes) {
pipe.Value.Enqueue(
new TestObject { Name = DateTime.Now.ToString("o") + "-" + i });
}
i++;
}
Console.WriteLine(DateTime.Now + "added stuff");
}
}
internal class TestObject {
public string Name { get; set; }
public bool Sent { get; set; }
}