【发布时间】:2015-02-06 16:06:00
【问题描述】:
我有一个控制器操作,它获取文档类型列表,然后为每个文档类型进行 Web 服务调用。我想一次完成所有这些,这样循环它们只需要最长的时间。我不知道我的代码是否正确,我需要做其他事情,或者我的代码是否完全不正确。
行动:
public ActionResult GetPlan(MemberViewModel request)
{
DocService ds = new DocService();
List<DocType> docTypes = ds.GetDocTypesForPlan(request.PlanId);
List<CoverageDocument> coverageDocuments = ds.GetDocumentsForDocTypes(docTypes);
return View(coverageDocuments);
}
GetDocumentsForDocTypes:
public List<CoverageDocument> GetDocumentsForDocTypes(List<DocType> planDocTypes)
{
List<CoverageDocument> planDocuments = new List<CoverageDocument>();
DocumentUtility documentUtility = new DocumentUtility();
int lastYear = DateTime.Now.Year - 1;
planDocTypes.ForEach(async (docType) =>
{
DocumentUtility.SearchCriteria sc = new DocumentUtility.SearchCriteria();
sc.documentType = docType;
Dictionary<long, Tuple<string, string>> documentList = await documentUtility.FindDocuments(sc);
documentList.ToList().ForEach((document) =>
{
CoverageDocument doc = this.coverageDocumentConstructor(document);
planDocuments.Add(doc);
});
});
return planDocuments;
}
例外:
附加信息:异步操作无法在 这次。异步操作只能在一个 异步处理程序或模块或在页面中的某些事件期间 生命周期。如果在执行页面时发生此异常,请确保 该页面被标记为 。这个例外可能 还表示尝试调用“async void”方法,即 在 ASP.NET 请求处理中通常不受支持。相反, 异步方法应该返回一个Task,调用者应该等待 它。
【问题讨论】:
标签: c# .net asp.net-mvc task-parallel-library async-await