【发布时间】:2014-02-27 12:59:12
【问题描述】:
我有一个任务应该异步运行但同步运行。
我创建了一个任务:
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 的调用不会异步运行,我如何将其更改为运行异步而不像运行异步那样包装它(或者如果它运行异步,不要等待结果并继续操作)?
我不需要任务返回值,也不介意获取它,但代码会继续运行循环中的下一次迭代,而无需等待结果继续。
【问题讨论】:
标签: c# .net wcf asynchronous task-parallel-library