试图了解服务器端异步/等待的使用。我的理解是它只有在可以释放线程时才有用。 如果我有:
[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/