Foreach与lambda的ToList().Foreach区别
1.ToList().Foreach无法保证内部异步方法的顺序;
2.Foreach 可以保证内部异步方法的顺序;
public static async Task Main() { var strings = new List<string> { "B", "C", "D" }; Console.WriteLine("A"); strings.ForEach(async s => { await AsyncMethod(s); } ); Console.WriteLine("E"); } private static async Task AsyncMethod(string s) { await Task.Run(() => { Console.WriteLine(s); }); } strings.ForEach(async s => { await AsyncMethod(s); }); foreach (var s in strings) await AsyncMethod(s);
ForEach does not support an async delegate since it takes an Action<T>. That reduces your method to un-awaitable async void. ForEach was never intended for a Func<Task> or any other async variant. Calling .Wait on AsyncMethod will cause a deadlock with a single threaded synchronization context. You have a few choices though:
浙公网安备 33010602011771号