繁体   English   中英

等待所有任务C#MVC

[英]Wait for all Tasks C# MVC

我在每次触发的每个视图页面的提交中都有一组图像被拒绝或接受,并且忘记了API请求:

@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>

    ....
}

并在控制器中:

[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");
    }

    ...
}

在集合的最后一个图像上,我需要检查所有任务是否已完成完成,然后再发送另一个API请求,该请求将它们在服务器上对图像进行分组,这是我在这里尝试的:

// If not the last image fire and forget
if (multimedias.Where(x => x.ProductID == multimedia.ProductID && x.ID != multimedia.ID).Count() != 0)
    multimedia.UploadToApi();
// else on the last image wait for it to finish then group
else
{
    await multimedia.UploadToApi();
    multimedia.ProcessRelatedFiles();
}

但是,看起来它并没有像我想的那样等待所有任务,并且如果您知道哪些任务正在运行,似乎有很多功能可以等待所有任务,而当您不知道哪些任务时是否会有类似的事情发生被解雇了?

将所有任务存储在以后可以访问的位置,例如列表中。 然后,您可以使用标准的await Task.WhenAll 我不明白为什么您需要特别对待最后一个任务。

没有内置的对正在运行的任务的跟踪,它实际上是不存在的,因为框架不知道您作为开发人员如何看待您的任务及其分组。

我希望您不要试图等待跨HTTP请求的任务。 通常不可能以可靠的方式做到这一点。 需要做其他事情,这样就没有必要了。 不要在请求之间共享状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM