我有一個任務應該異步運行,但同步運行。Task.Result等待而不是繼續異步操作
我創建了一個任務:
var task = Task<int>.Factory.FromAsync(proxy.BeginSaveImage(sp, new AsyncCallback(CompleteSave), state), proxy.EndSaveImage);
int res = task.Result;
任務調用異步WCF服務。 WCF服務功能:
public IAsyncResult BeginSaveImage(statePackage sp, AsyncCallback callback, object state)
{
gStatePackage = sp;
// Create a task to do the work
var task = Task<int>.Factory.StartNew(this.SaveImage, state);
return task.ContinueWith(res => callback(task));
}
我在循環中運行任務。
我的問題是,當我運行它時,它不會並行運行,每次調用task.Results
都會在繼續之前等待任務完成。
當我把任務代碼的函數SaveImageProcedure
,並從這樣的循環中調用它:
Task.Factory.StartNew(() =>
{
SaveImageProcedure(sp);
});
它異步運行。我不想用另一個異步包裝器包裝異步調用。爲什麼使用task.Result
的調用不會異步運行,我如何將其更改爲運行異步,而不像我一樣運行異步(或者運行異步,不等待結果並繼續運行),而是將其包裝爲運行異步?
我不需要任務返回值,也不介意得到它,但是代碼會繼續爲循環中的下一個迭代運行,而無需等待結果繼續。
嗨伊恩,如何使用繼續,請你提供一個例子,所以我可以在實踐中嘗試它。謝謝 –
@IdanShechter文檔告訴你你需要的一切http://msdn.microsoft.com/en-us/library/ee372288%28v=vs.110%29.aspx Google搜索查詢是'c#continuation'。 – Gusdor
非常好,非常感謝。 –