我有如下代码,它正确地使用了异步/等待编程范式。
internal static async Task AddReferencseData(ConfigurationDbContext context)
{
foreach (var sinkName in RequiredSinkTypeList)
{
var sinkType = new SinkType() { Name = sinkName };
context.SinkTypeCollection.Add(sinkType);
await context.SaveChangesAsync().ConfigureAwait(false);
}
}
如果我想使用LINQ ForEach()而不是foreach(),那么写这个if语句的等效方法是什么?例如,这个会导致编译错误。
internal static async Task AddReferenceData(ConfigurationDbContext context)
{
RequiredSinkTypeList.ForEach(
sinkName =>
{
var sinkType = new SinkType() { Name = sinkName };
context.SinkTypeCollection.Add(sinkType);
await context.SaveChangesAsync().ConfigureAwait(false);
});
}
我唯一能让代码正常运行且没有编译错误的代码是这段。
internal static void AddReferenceData(ConfigurationDbContext context)
{
RequiredSinkTypeList.ForEach(
async sinkName =>
{
var sinkType = new SinkType() { Name = sinkName };
context.SinkTypeCollection.Add(sinkType);
await context.SaveChangesAsync().ConfigureAwait(false);
});
}
我担心这种方法没有异步签名,只有主体。 这是我上面第一段代码的正确等价吗?
ForEach
不是LINQ函数。 - GrundySaveChangesAsync
放在循环外部。我怀疑将其放在内部没有任何优势(相反,可能会有性能惩罚)。 - Charles Mager