【发布时间】:2016-04-26 18:42:06
【问题描述】:
我只是粗略地使用以下模式将大量数据访问方法转换为异步,它看起来太简单以至于无法满足以后的迭代。它有多安全,缺少什么,我应该怎么做?
提供长时间运行调用的服务:
private class UserService
{
public IdentityUser GetById(int id)
{
...
}
}
private UserService _userService = new UserService();
原同步方式:
public IdentityUser GetById(int id)
{
return _userService.GetById(id);
}
我奇妙的新异步方法:
public async Task<IdentityUser> GetByIdAsync(int id)
{
await Task.Run(() => _userService.GetById(id));
}
【问题讨论】:
-
长时间运行的查询有很多您需要处理的可能问题。为什么不直接安装 SignalR nuget 并为您修复它们 - 以及 websocket 支持!
-
@MattiasÅslund:不同的人对“长跑”有不同的定义。我有一种感觉 GetById() 不是那种值得使用 SignalR 的“长期运行”。
-
它是您作为 WCF 服务还是 Web API 使用的东西?如果是这样,你只会让服务器端的事情变得更糟。
-
如果您正在考虑同步方法的异步包装器,请参阅this
标签: c# asynchronous async-await c#-5.0