c# - 更改我的服务器端 WebAPI 以获得异步/等待的好处

标签 c# asp.net-web-api async-await

试图了解服务器端异步/等待的使用。我的理解是它只有在可以释放线程时才有用。 如果我有:

[HttpGet]
public async Task<IEnumerable<MyObject>> Get()
{        
     return await Task<IEnumerable<MyObject>>.Run(() => DoThingsAndGetResults());
}

IEnumerable<MyObject> DoThingsAndGetResults()
{
    // ...Do some CPU computations here...

    IEnumerable<MyObject> result = myDb.table.Select().ToList(); // entity framework

    // ...Do some CPU computations here...

    return result;
}

线程会被释放吗?在这种情况下 Async/Await 没用吗?从 async/await 中获益的唯一方法是如果我进行一些更大的更改并执行此操作:

[HttpGet]
public async Task<IEnumerable<MyObject>> Get()
{        
     return await DoThingsAndGetResultsAsync();
}

async IEnumerable<MyObject> DoThingsAndGetResultsAsync()
{
    // ...Do some CPU computations here...

    IEnumerable<MyObject> result = await myDb.table.Select().ToListAsync(); // entity framework

    // ...Do some CPU computations here...

    return result;
}

最佳答案

当您必须等待 IO 操作(从文件读取、查询数据库、从 Web 服务器接收响应)时,异步方法最有用。

当您的数据库提供程序支持像 Entity Framework 6 这样的异步查询时,使用异步是可以的。尽管它对 CPU 密集型操作(计算等)不是很有用。

请参阅 ASP.NET MVC4 Async controller - Why to use? 中的相关答案

关于c# - 更改我的服务器端 WebAPI 以获得异步/等待的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23927343/

相关文章:

c# - 当用户在c#中单击它时获取图像的来源

C# CR 后必须跟 LF

c++ - 如何在 C++ 中创建异步/等待代码?

c# - .Net 4.5中Async/Await的简单解释

swift - SwiftUI 中的 `Task` 和 `async` 有什么区别

c# - 获取查询中列的列别名?

c# - 电视卡申请

c# - Task.ContinueWith执行顺序

vb.net - EDM 模型根上的 ASP.NET Web API OData 操作

authentication - 如何在 asp.net web api 中使用授权按钮设置 swagger API 登录?