c# - 放置异步/等待的最佳做法是什么?

标签 c# asynchronous 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;
}

它们之间有什么区别(性能或其他)吗?哪个是最佳实践?

最佳答案

没有明显区别

  • 首先,您从 PasswordSignInAsync 返回一个 Task 分配 result.Success = true 然后等待任务

  • 第二,您正在等待 PasswordSignInAsync Task,如果它没有抛出您分配 result.Success = true

如果有的话,第二个版本更干净,并且您可以通过可能不执行冗余分配来节省一点点 IL。总而言之,我不希望有任何性能差异,归结为时尚感

关于c# - 放置异步/等待的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51513587/

相关文章:

javascript - 在应用程序变量更改时回发 UpdatePanel

C# 等效于 VB 6 DoEvents

java - Spring 任务异步和延迟

windows - 如何在 Windows UAP 应用程序中解决 "' IAsyncActionWithProgress< >' is defined in an assembly that is not referenced"

javascript - 异步函数返回未定义

c# - 在将图像添加到 PDF 之前如何旋转图像?

c# - 如果找不到 key ,如何安全地访问 actionContext.Request.Headers.GetValues?

javascript - 在 RxJS Observable 的 onNext 中等待异步操作

sockets - 套接字未阻塞写入操作 : OpenSolaris

c# - 抑制 "warning CS4014: Because this call is not awaited, execution of the current method continues..."