簡體   English   中英

來自控制器的HttpClient PostAsync沒有結果

[英]HttpClient PostAsync from controller without result

我想找出在從控制器調用方案的情況下不需要PostAsync調用的結果的情況下到底發生了什么。
例如,我有一些動作

[HttpPost]
public ActionResult DoSomething(SomeModel model)
{
    ...
    PostDataFireAndForget(model);
    ...
    return new EmptyResult();
}

private void PostDataFireAndForget(SomeModel model)
{
    try
    {
        using (var client = new HttpClient())
        {
            string targetUrl="SomeUrl";
            client.PostAsync(targetUrl, new FormUrlEncodedContent(model.Content));
        }
    }

    catch (Exception ex)
    {
        //we didn't care about the response, no additional requirements here
        //ignore
    }
}

所以我想知道它將如何進行,以及為什么在所有可能的情況下。 最有趣的情況是PostAsync花費比所有其他動作代碼更長的時間,因此動作在PostAsync完成之前完成。 它會被終止/阻止/完成嗎? 如果我想執行某種異步操作並且不想等待結果,有什么更好的方法?

使fire and忘記方法一直保持異步,以便可以捕獲和忽略異常。 在其當前設計中,它可能導致主操作請求的線程掉線。

private async Task PostDataFireAndForgetAsync(SomeModel model) 
    try {
        using (var client = new HttpClient()) {
            var targetUrl="SomeUrl";
            await client.PostAsync(targetUrl, new FormUrlEncodedContent(model.Content));
        }
    } catch (Exception ex) {
        //we didn't care about the response, no additional requirements here
        //ignore
    }
}

通過使其異步,該方法可以處理(或在這種情況下不能處理)異常,並讓其他線程繼續。

[HttpPost]
public ActionResult DoSomething(SomeModel model) {
    //... fire and forget
    PostDataFireAndForgetAsync(model);
    //...
    return new EmptyResult();
}

始終調用函數/方法來處理輸入並顯示輸出,無論是否需要結果都無關緊要。 如果您不想等待結果,則即使您希望忽略結果,也必須至少等待過程完成。

在您的方案中,您正在發出請求,並且沒有任何結果,盡管所有UI進程可能已完成並退出,但應用程序將保留在內存中,直到異步完成。 在完全結束所有例程之前,最好等待異步完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM