【发布时间】:2013-08-24 09:26:23
【问题描述】:
我已尝试阅读异步方法,现在正在尝试创建自己的异步方法。该方法是一个返回错误日志列表的 Web 服务调用。我不确定我是否理解正确,所以我想我会分享我的代码,看看我是否应该做些不同的事情。
我想要代码做的只是通过调用方法GetAllErrorLogs()返回一个错误日志列表,这是一个同步方法。由于获取所有错误日志可能需要一秒钟,因此我希望在调用 GetAllErrorLogs() 方法后有机会做其他事情。这是代码。
[WebMethod]
public async Task<List<ErrorLog>> GetAllErrorLogs()
{
List<ErrorLog> errorLogs = new List<ErrorLog>();
await System.Threading.Tasks.Task.Run(() => {
errorLogs = ErrorLogRepository.GetAllErrorLogs();
});
if (errorLogs == null)
return new List<ErrorLog>();
return errorLogs;
}
谢谢!
【问题讨论】:
-
我看不出在服务器端使用 async/await 有多大优势。您只需对同一件事使用更多线程。
-
@I4V:
async在服务器端可以显着减少每个请求使用的线程数(假设代码自然是异步的,而不是像@这样的伪异步987654324@)。因此,异步服务器能够更好地扩展,通常为 10-100 倍。 -
Stephan Cleary 是正确的...我在微软校园参加了一个培训课程,在那里我们被告知,只要异步运行在服务器上的所有代码,您就可以大幅增加相同的容量硬件。纯粹是因为,当一个方法在等待子调用的响应时,主线程被释放去做其他工作......即处理其他并发的网络请求。优点是多任务处理。
标签: c# .net async-await