例如,讓我們說我正在寫與下面的簽名(C#4所以沒有異步關鍵字)的方法:創建表示一系列連續任務的任務
public Task Refresh();
它會調用一個方法(它也返回Task
)執行通信工作,然後運行任務延續以基於檢索到的數據更新某些內部狀態。 e.g:
public Task Refresh()
{
Task<MyData> commsTask = datasource.LoadData();
Task handleDataTask = commsTask.ContinueWith(HandleNewData);
return ?;
}
如果我返回handleDataTask
它的完成狀態正確跟蹤「刷新」操作的結果,但它不正確地報告它的啓動狀態。
我可以將它們都包裝在一個新的Task.Factory.StartNew
中,並將它們作爲子任務創建,但是爲了鏈接某些任務延續而使用新線程似乎很浪費。
當然,有一個整潔有效的方式來與TPL做到這一點?
你爲什麼關心國家? – svick 2012-04-15 10:26:52
這樣的實現匹配方法簽名的隱式文檔?我不知道,問我的方法的消費者。 「Task.Status」屬性可能有100多種用途,我所知道的是我的方法應該返回一個正確跟在它的文檔後面的「Task」。 – Tyson 2012-04-15 10:34:57