假設BlockingCollection使用下面的ConcurrentQueue,如果您使用Timeout.Infinite,TryTake(T, Int32) method何時會返回false?什麼時候可以BlockingCollection <T> TryTake()返回false?
回答
下面是一個簡單的例子,顯示何時可以返回false:當收集被標記爲CompleteAdding
,併成爲emptу
//by default, BlockingCollection will use ConcurrentQueue
BlockingCollection<int> coll = new BlockingCollection<int>();
coll.Add(1);
coll.Add(2);
coll.CompleteAdding();
int item;
if (coll.TryTake(out item, -1))
{
Console.WriteLine(item);
}
if (coll.TryTake(out item, -1))
{
Console.WriteLine(item);
}
if (coll.TryTake(out item, -1))
{
//this won't get hit
}
else
{
Console.WriteLine("TryTake returned false!");
}
這可以讓你以禁止將在隊列中,其餘元素的完整加工新項目
如果不使用.CompleteAdding()觸發,它將不會返回false,但是正確嗎? – Gyrien
@Gyrien正確,但它永遠不會超過最後一次'TryTake'調用(假設您使用無限超時),因爲它將在那裏等待,直到您發出信號表示您已完成添加到集合。 –
這將打印false
:
var coll = new BlockingCollection<int>();
coll.CompleteAdding(); // closed for business
int v;
bool result = coll.TryTake(out v, Timeout.Infinite);
Console.WriteLine(result);
所以基本上一個BlockingCollection支持2個分隔符電子概念:空的和封閉的。雖然TryTake()可以在空隊列上永久等待,但當隊列都爲空和已關閉時,將返回false
。
如果您不使用.CompleteAdding()觸發,它將不會返回false,但是正確嗎? – Gyrien
正確,它們旨在一起工作。 –
- 1. 什麼時候可以ManualResetEvent.Set()返回false?
- 2. 什麼時候php json_decode返回false?
- 3. 什麼時候reflect.IsValid返回false?
- 4. HttpServletRequest.getSession(false):它什麼時候返回null?
- 5. 什麼時候instanceof返回FALSE?
- 6. IProducerConsumerCollection <T> .TryAdd/.TryTake - 它們何時返回true/false?
- 7. 什麼時候可以mktime返回-1?
- 8. 什麼時候可以ValidatorUtils.getValueAsString()返回null?
- 9. 返回True/False - 什麼時候使用它只是返回
- 10. 什麼時候empty()返回false並且$ var ==''返回true?
- 11. 什麼時候和爲什麼List remove(Object object)返回false
- 12. OpenCV和(不)返回IplImages,什麼時候可以,什麼時候沒有?
- 13. 什麼時候返回null?
- 14. 什麼時候ssh2_scp_send()返回?
- 15. Idiomatic C#:什麼時候返回null以及何時返回NaN
- 16. 爲什麼null <>「something」返回false
- 17. 在PHP中,什麼時候變量賦值返回false?
- 18. 什麼時候你返回一個類,你什麼時候返回一個HttpResponseMessage?
- 19. 如何使用BlockingCollection <'a>.TryTake in F#
- 20. 什麼時候返回空集合,什麼時候不是?
- 21. QTreeWidget :: currentItem什麼時候沒有選擇什麼時候返回?
- 22. 什麼時候可以返回WCF客戶端的異常?
- 23. 什麼時候可以省略javascript中的返回值
- 24. 可以Process.WaitForInputIdle()返回false?
- 25. 什麼時候ref($ variable)返回'IO'?
- 26. 什麼時候WASAPI GetNextPacketSize返回0
- 27. 什麼時候Angular4 HttpClient.get()返回undefined?
- 28. 什麼時候ServletRequest.getRemoteAddr返回IPv6
- 29. 什麼時候ItemContainerGenerator.Status枚舉返回GeneratorStatus.Error?
- 30. 什麼時候EndResumeBookmark會返回BookmarkResumptionResult.NotReady?
您鏈接到的文檔包含您的問題的答案。你在尋找答案?一個具體的例子?會失敗的代碼?文檔清楚地說明將導致該方法拋出的原因。 – evanmcdonnal
或者,您是在問什麼時候它會返回false而不是拋出異常? –
@ledbutter這就是我所問的,我已經更新了OP。 – Gyrien