[英]What is best practice for placing async/await?
我有以下代碼:
public async Task<JsonResult<LoginStatus>> Login(LoginDTO loginDTO)
{
var result = new JsonResult<LoginStatus>();
try
{
var signIn = SignInManager.PasswordSignInAsync(loginDTO.Username, loginDTO.Password, loginDTO.IsPersistent, false); // or any async method.
result.Success = true;
await signIn;
}
catch (Exception ex)
{
result.Success = false;
result.Error = ex;
}
return result;
}
我可以這樣更改:
public async Task<JsonResult<LoginStatus>> Login(LoginDTO loginDTO)
{
var result = new JsonResult<LoginStatus>();
try
{
await SignInManager.PasswordSignInAsync(loginDTO.Username, loginDTO.Password, loginDTO.IsPersistent, false); // or any async method.
result.Success = true;
}
catch (Exception ex)
{
result.Success = false;
result.Error = ex;
}
return result;
}
它們之間有什么區別(性能或其他)嗎? 最佳實踐是哪一種?
沒有明顯的區別
在第一個,你是返回一個Task
從PasswordSignInAsync
分配result.Success = true
,然后等待任務
在第二個步驟中,您正在等待PasswordSignInAsync
Task
,如果沒有拋出,請分配結果result.Success = true
如果有的話,第二個版本更干凈,您可能不執行冗余分配而節省了一點IL
。 總而言之,我不認為會有任何性能差異,並且歸結為時尚感
SignInManager.PasswordSignInAsync
中的某個SignInManager.PasswordSignInAsync
正在等待。 在第一種方法中,您已經分配了結果,然后才真正知道登錄是否成功。 如果在此之后簽名失敗,那么您的作業將是徒勞的。
因此,要知道應該使用第一種方法還是使用后一種方法,取決於您期望該方法失敗的頻率。 通常,異常處理非常昂貴。 因此,僅應在預計它們很少發生的情況下才使用它們,尤其是在修復導致異常的問題所需的時間方面。
如果真是這樣,那么您可以同時使用兩種方法。 也許第一個是計算機速度更快一些。 如果您可以確保在構造之后您的JsonResult已經具有成功值,則可能會更快:
var result = new JsonResult() {Success = true;}
僅在catch塊中將其更改為false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.