2013-05-02 80 views
6

請讓我知道我是否可以同時運行多個Task.Factory.StartNew聲明。如何從Task.Factory.StartNew <>得到結果?

一些這樣的事

var task = Task.Factory.StartNew<List<AccessDetails>>(() => this.GetAccessListOfMirror(mirrorId, null,"DEV")); 
var task1 = Task.Factory.StartNew<List<AccessDetails>>(() => this.GetAccessListOfMirror(mirrorId, null, "PROD")); 

如果是這樣的。如何獲取語句的輸出並使用它。

我已經使用過如下語句。應用程序將等待直到我從線程獲得輸出。

var task = Task.Factory.StartNew<List<AccessDetails>>(() => this.GetAccessListOfMirror(mirrorId, null,"DEV")); 
return (List<AccessDetails>)task.ContinueWith(tsk => accdet = task.Result.ToList()).Result; 
+0

不知道如果我得到你的問題,但如果你想等到執行完成,你可以使用Task.Wait(),然後抓住Task.Result。 – Mecaveli 2013-05-02 07:53:55

+1

@Mecaveli [Task.Result](http://msdn.microsoft.com/zh-cn/library/dd321468.aspx)阻塞直到完成,如果您正在處理,則不需要先調用Task.Wait()一項任務。 – 2013-05-02 08:04:06

+0

Thx爲更正。他處理多任務 - 本來就是Task.WaitAll。 – Mecaveli 2013-05-02 08:09:33

回答

1

您可以輕鬆地運行多個任務

您可以使用任務結果MSDN Example

您可以創建一個對象,可容納你resullts它傳遞給任務和更新 應該看像這樣的東西

MyResultObeject res = new MyResultObject 
var task = Task.Factory.StartNew<List<AccessDetails>>(() => this.GetAccessListOfMirror(res,mirrorId, null,"DEV")); 

只是不要忘記檢查任務是否已完成

11

你可以讓多任務運行,並等待他們全部完成這樣的:

var task = Task.Factory.StartNew<List<AccessDetails>>(() => this.GetAccessListOfMirror(mirrorId, null,"DEV"));   
var task1 = Task.Factory.StartNew<List<AccessDetails>>(() => this.GetAccessListOfMirror(mirrorId, null, "PROD")); 

var allTasks = new Task[]{task, task1}; 

Task.WaitAll(allTasks); 

var result = task.Result; 
var result1 = task1.Result;  

如果你只想等待第一個完成,你可以使用Task.WaitAny例如。

相關問題