背景情報: 一度に 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;
}