tra*_*m_3 8 c# asynchronous entity-framework
说我有一个有一个Repository类的课DbContext.在这堂课中,我有一个方法:
public async Task<T> CreateAsync(T obj)
{
var o = _dbSet.Add(obj);
await _dbContext.SaveChangesAsync();
return o;
}
Run Code Online (Sandbox Code Playgroud)
在Service类中,我使用此方法来创建对象:
public async Task<MyObject> Create()
{
return await _repository.CreateAsync(new MyObject());
}
Run Code Online (Sandbox Code Playgroud)
最后在我的api控制器中,MyObjectController我返回这个对象:
public async Task<IHttpActionResult> Get()
{
return Ok(await _service.Create());
}
Run Code Online (Sandbox Code Playgroud)
我对所有这些async和await关键字感到困惑.我知道a Task是等待的.这是否意味着我可以只归还Task从CreateAsync没有既不等待CreateAsync或Create然后最后等待它Get?它是否对我的应用程序有负面影响,我在等待示例中等待?
这是否意味着我可以从 CreateAsync 返回任务,而无需在 CreateAsync 或 Create 中等待,然后最终在 Get 中等待它?
是的,你可以这样做,实际上效率更高。如果您在执行等待时执行等待,则每个异步方法都会生成一个状态机,这意味着更多的代码和更多的上下文切换
像示例中那样进行等待会对我的应用程序产生负面影响吗?
由于状态机和上下文切换,会有轻微的性能损失。成本通常远低于通话成本,但最终都会加起来。异步性能:了解异步和等待的成本是关于此主题的一篇很棒的文章。
正如 @Richard Szalay 所指出的,只需确保您最终完成await任务,否则发生的任何异常都将不被观察到并被吞噬。
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |