背景情報: 一度に 5 つの同時操作を処理できるシングルトン クラスを作成しようとしています。各操作は で表されSomeAsyncMethod
ます。
このメソッドは、シングルトン クラス内に存在します。
consumers
ですConcurrentDictionary<int,Task>
私の問題: 何らかの理由で、ContinueWith
デリゲートは の完了前に実行されSomeAsyncMethod
ます。これが起こっていることを知っている理由は、監視する別のメソッドがあるためですinstance.Consumers.Count
-カウントは実行0
前SomeAsyncMethod
です。
何故ですか?
public bool TryAddDequeueRequest()
{
if (instance.Consumers.Count < 5)
{
Task bogusTask;
Task newTask = new Task(SomeAsyncMethod);
//RUNS AFTER THE REQUEST IS COMPLETED
newTask.ContinueWith(t =>
{
instance.Consumers.TryRemove(t.Id, out bogusTask);
});
//WE ADD THE TASK TO QUEUE
instance.Consumers.TryAdd(newTask.Id, newTask);
//SET IT AND FORGET IT
newTask.Start();
return true;
}
else
return false;
}