gpt4 book ai didi

c# - 你什么时候应该等待任务?

转载 作者:太空狗 更新时间:2023-10-29 19:42:32 25 4
gpt4 key购买 nike

假设我有一个 Repository 类,它有一个 DbContext。在这个类中我有一个方法:

public async Task<T> CreateAsync(T obj)
{
var o = _dbSet.Add(obj);
await _dbContext.SaveChangesAsync();
return o;
}

Service 类中,我使用此方法创建一个对象:

public async Task<MyObject> Create()
{
return await _repository.CreateAsync(new MyObject());
}

最后在我的 api Controller MyObjectController 中,我像这样返回这个对象:

public async Task<IHttpActionResult> Get()
{
return Ok(await _service.Create());
}

我对所有这些 asyncawait 关键字感到困惑。我知道 Task 是可等待的。这是否意味着我可以直接从 CreateAsync 返回 Task 而无需等待 CreateAsyncCreate 然后最后在 Get 中等待它?我像示例中那样等待对我的应用程序有负面影响吗?

最佳答案

Does this mean that I could just return the Task from CreateAsync without awaiting in neither CreateAsync or Create and then finally await it in Get?

是的,你可以这样做,它实际上更有效率。如果你在等待的同时进行等待,每个异步方法都会生成一个状态机,这意味着更多的代码和更多的上下文切换

Does it have a negative effect on my application that I do my awaits like in the example?

由于状态机和上下文切换,会有轻微的性能损失。成本通常比通话成本低得多,但最终会全部加起来。 Async Performance: Understanding the Costs of Async and Await 是一篇关于该主题的精彩文章。

正如@Richard Szalay 所指出的,只需确保您最终await 任务,否则发生的任何异常都不会被观察到并会被吞没。

关于c# - 你什么时候应该等待任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30545993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com