2014-12-23 65 views
-3
public bool SampleMethod() 
{ 
    Parallel.ForEach(List, Val => 
    { 
     // execute some time consuming code 
    }); 
    return true; 
} 

我注意到Parallel.Foreach阻塞了線程,直到foreach循環中的所有任務都完成爲止。在Parallel.Foreach完成之前返回一些東西

對於上面的方法,即使Parallel.foreach塊中的操作仍在執行(我們仍然應該在後臺運行,直到所有操作都完成),我要立即返回true。

這可能嗎?

+1

使用任務API在後臺執行執行,並行API不是爲此目的。您可以啓動任務,而不是等待它們完成並在啓動所有任務後返回true –

回答

3

你可以做你的並聯運行在另一個線程:

public bool SampleMethod() 
{ 
    Task.Run(() => { 
         Parallel.ForEach(List, Val => 
         { 
          // execute some time consuming code 
         }); 
        }); 
    return true; 
} 

這將啓動任務在一個單獨的線程,而不必等待它完成返回true

+0

單獨的線程是後臺線程還是可以繼續工作,即使該進程返回並退出該進程也是前臺線程,這將需要主進程線程不能退出 –

+0

這是一個後臺線程。 –

相關問題