我应该对异步REST调用使用async / await吗?

时间:2019-10-03 17:16:49

标签: c# rest asynchronous

我正在尝试学习在ASP.NET托管的REST服务中使用异步/等待的最佳实践。我在下面提供了一个示例。在这种情况下,我有一个GET请求处理程序,可以异步提取所有帐户。我在用于通过调用Task.Delay提取数据的私有方法中添加了人为的较大延迟。这模拟了从数据源提取数据所需的时间。

GetAllAccountsPrivateAsync然后返回数据,然后将这些数据传递回GetAllAccountsAsync端点的调用方。

我缺少这种方法的好处吗?在Swagger中,完成请求仍然需要10秒钟,而我要为实质上是同步的流程添加协调开销。

我了解在需要等待来自多个源的数据并希望在将结果合并为一个输出之前等待所有查询完成的情况下使用它的方法,但是当它从一个源中获取数据并等待完成时,似乎更有效同步执行此操作。

[HttpGet]
[Route("accounts")]
public async Task<IEnumerable<Account>> GetAllAccountsAsync()
{
    var accounts = await this.GetAllAccountsPrivateAsync();
    return accounts;
}

private async Task<List<Account>> GetAllAccountsPrivateAsync()
{
    await Task.Delay(10000);

    var accounts = new List<Account>
    {
        new Account
        {
            AccountId = 1,
            AccountBalance = 17,
            AccountOwnerName = "Bob"
        },
        new Account
        {
            AccountId = 2,
            AccountBalance = 25,
            AccountOwnerName = "Josie"
        }
    };

    return accounts;
}

1 个答案:

答案 0 :(得分:0)

异步允许应用程序管理其线程池,并发管理和新请求可以得到更有效的处理。

了解更多:Async and Await

还要检查:Advanced Tips for Using Task.Run With Async/Await

相关问题