我有一组要拒绝或接受的图片,在每个视图页面的提交时都会触发并忘记API请求:
RedirectMatch 301 ^/categorie/boulangerie-et-patisserie/((?!/page/).+)$ http://recyclageindustriel.com/produit/boulangerie-et-patisserie/$1
RedirectMatch 301 ^/produit/boulangerie-et-patisserie/page/(.*)$ http://recyclageindustriel.com/categorie/boulangerie-et-patisserie/page/$1
并在控制器中:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<h1>
@Html.DisplayFor(modelItem => modelItem.Name)
<button type="submit" class="btn btn-default" name="isValid" value="true">
<span class="glyphicon glyphicon-ok"></span>
</button>
<button type="submit" class="btn btn-default" name="isValid" value="false">
<span class="glyphicon glyphicon-remove"></span>
</button>
</h1>
....
}
在集合的最后一个图像上我需要检查所有任务是否已完成完成,然后再发送另一个API请求,该请求将我在此服务器上的图像分组:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit(MultimediaEditView multimediaEditView)
{
var multimedias = db.Multimedias.Where(x => x.IsValid == null && x.IsActive == true);
Multimedia multimedia = db.Multimedias.Find(multimediaEditView.ID);
multimedia.InjectFrom(multimediaEditView);
if (ModelState.IsValid)
{
if (multimedia.IsValid == true)
{
if (multimedias.Where(x => x.ProductID == multimedia.ProductID && x.ID != multimedia.ID).Count() != 0)
multimedia.UploadToExternalApi();
else
{
await multimedia.UploadToExternalApi();
multimedia.ProcessRelatedFiles();
}
}
db.Entry(multimedia).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
...
}
然而,看起来它并没有像我想象的那样等待所有任务,如果你知道哪些任务正在运行,似乎有很多功能可以等待所有任务,当你没有这样的任务时知道哪些任务被解雇了?
答案 0 :(得分:0)
将所有任务存储在稍后可以访问的位置,例如列表中。然后,您可以使用标准await Task.WhenAll
。我不明白为什么你需要特别对待上一个任务。
没有对正在运行的任务的内置跟踪,它实际上不存在,因为框架无法知道您作为开发人员如何考虑您的任务及其分组。
我希望您不要等待跨越HTTP请求的任务。通常不可能以可靠的方式进行。需要做其他事情,这样就没有必要了。不要在请求之间共享状态。