2011-03-21 45 views
4

我目前正在嘗試使用.net任務來運行長方法。我需要能夠從任務中返回數據。每次在新任務中運行時,我都會多次調用此方法。但是,使用Task.Result屬性返回數據會使每個任務等待直到完成。如何從線程任務中返回數據

例如目前如果做到像這樣:

public void RunTask() 
{ 
    var task = Task.Factory.StartNew(() => 
    { 
     return LongMethod() 
    }); 

    Console.WriteLine(task.Result); 
} 

並調用它多次,每次都採取了不同的時間量,它針對每個任務,等待執行下一個之前完成。

是否可以多次調用RunTask方法,每次都返回結果而無需等待每個任務按順序完成?

回答

5

是的。當您致電task.ResultTask<T>時,它將阻塞,直到發生結果。

如果你想使這個完全異步的,你既可以在調用者的水平改變你的方法直接返回Task<T>,和「塊」,或使用一個延續:

public void RunTask() 
{ 
    var task = Task.Factory.StartNew(() => 
    { 
     return LongMethod() 
    }); 

    // This task will run after the first has completed... 
    task.ContinueWith(t => 
     { 
      Console.WriteLine(t.Result); 
     }); 
} 
+0

啊我明白延續現在。這完成了我所需要的。謝謝。 – Web 2011-03-21 18:20:33