背景信息:我正在嘗試創建一個能夠同時處理5個併發操作的單例類。每個操作由SomeAsyncMethod
表示。ContinueWith任務完成前任務運行
該方法存在於單例類中。
consumers
是ConcurrentDictionary<int,Task>
我的問題:由於某種原因,ContinueWith
委託SomeAsyncMethod
完成之前運行。我知道這種情況發生的原因是因爲我有另一種方法,手錶instance.Consumers.Count
- 在SomeAsyncMethod
完成之前計數爲0
。
這是爲什麼?
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;
}
你怎麼知道它尚未完成? – 2014-09-05 20:20:52
添加了詳細信息。 (我知道發生這種情況的原因是因爲我有另一種方法來監視instance.Consumers.Count - 在SomeAsyncMethod完成之前計數爲0.) – 2014-09-05 20:21:20
'SomeAsyncMethod'調用某些服務並更新數據庫。全部通過'async'和'await'操作完成。 – 2014-09-05 20:22:29