[英]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.