如果我有一個IEnumerable(列表)以下順序:如何PLINQ訂單輸入
1 - 2 - 3 - 4 - 5
,如果我上運行PLINQ查詢此說:
list.AsParallel().AsOrdered().WithDegreeOfParallelism(10).Select(
s => SomeDelegateFunction(s)).AsSequential().ToList();
對於上述查詢,我在我的日誌記錄(內部委託函數)中看到它使用多個線程,但不維護列表的處理順序。 然而,對於下面的查詢我確實維持序列,但是使用單個線程來執行的全部操作:
list.AsParallel().AsOrdered().WithDegreeOfParallelism(10).AsSequential().Select(
s => SomeDelegateFunction(s)).ToList();
兩個查詢之間的差是「AsSequential()」中的第二查詢,該問題,我當時我使用AsSequential():
1 - 爲什麼它不使用多線程?它可能已經破裂的工作爲:
1 - 2 (Give it to thread 1)
3 - 4 - 5 (Give it to thread 2)
相反,它所做的1 - 2 - 3 - 4 - 5(按順序),但它確實在單個線程 - 爲什麼?
基本上我需要處理我的列表在ORDER它作爲輸入,但在多個線程。
任何想法?
嗯......理論上,工作分工可能已經按順序完成,然後並行工作 - 正確嗎? –
@MurtazaMandvi在我引用你的陳述中明確指出,他們需要按照他們進來的順序進行處理。這使問題不能並行解決。如果您希望它以任何順序處理它們,但確保完成後最終結果將以與首次收到時相同的順序返回,那麼這是可能的,但這不是您要求的。 – Servy
你的代碼可以工作,但我認爲使用'AsOrdered()'是一個更清潔的選擇:你不必處理索引,結果將是相同的。 – svick