簡體   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