我有一个任务应该异步运行,但同步运行。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
非常好,非常感谢。 –