【发布时间】:2012-07-10 01:00:37
【问题描述】:
所以我有一个支持“保存”方法的业务对象,该方法对某些设备执行一些 IO。然后我有一个我想批量异步保存的对象的列表。我的代码现在看起来像这样:
public async Task Save()
{
foreach (var element in Elements)
{
await element.Save();
}
}
现在这会导致n 的等待次数,而且我知道每个等待都会导致一些 CPU 开销。我想消除这个,只有一个等待。我如何重构来实现这一点?
【问题讨论】:
-
如果
Save()进行 I/O,CPU 开销真的很重要吗? -
你能把 foreach 放在不同的方法中,然后在 await 之后调用吗?
-
只有前一个元素已经保存后才能保存下一个元素吗?
-
@millimoose 就我而言,这可能是因为我在 Save-method 中进行了脏检查。如果对象不脏,则不会执行任何 I/O - 因此这些调用的主要 CPU 时间将是 async/await-padding。如果我有一个包含 10000 个对象的列表,并且只有 1 个是脏的,我最终会得到 9999 个不必要的异步等待,我怀疑这会很重要。
-
@marvc1 好问题。这两种情况都可能相关,但主要是我想按顺序进行(“是”)。
标签: c# async-await