Ho il seguente codice che utilizza correttamente il paradigma async/await.C# async attendono utilizzando LINQ ForEach()
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);
}
}
Qual è il modo equivalente a scrivere questo caso, invece di utilizzare foreach(), che voglio usare LINQ foreach()? Questo, ad esempio, fornisce un errore di compilazione.
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);
});
}
L'unico codice che ho potuto lavorare senza errore di compilazione è questo.
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);
});
}
Sono preoccupato che questo metodo non abbia firma asincrona, solo il corpo. È l'equivalente corretto del mio primo blocco di codice sopra?
'ForEach' non una funzione linq – Grundy
Perché si desidera modificarlo del tutto? Se non è rotto, non aggiustarlo. –
Post di Eric Lipert eccellente utilizzando "foreach" vs "ForEach" http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx –