我正在使用.Net 4.7.2和C#7
在一个类中有服务器方法,所有方法都是无效的。其中一些可以异步执行,其他一些则必须顺序执行。所以我为水货定义了一个清单
private void ExecuteSequential()
{
SomeMethod1();
SomeMethod2();
ExecuteParallelAsync();
SomeMethod3();
SomeMethod4();
}
private async void ExecuteParallelAsync()
{
List<Action> methods = new List<Action>()
{
MyMethod1,
MyMethod2,
MyMethod3
};
await Task.Run( () => { Parallel.ForEach( methods , ( currentMethod ) => currentMethod.Invoke() ); } );
}
Run Code Online (Sandbox Code Playgroud)
在SomeMethod3碰巧执行之前,ExecuteParallelAsync应该完全完成。因为不是这种情况,所以我对async和await的使用显然存在问题。
我做错了什么?
提前致谢!
Mar*_*ell 11
async void-所有赌注都关闭了;在现实中,你应该永远不会写async void,除非你的方法是微小的微小一套需要它的极端的角落的情况下,如异步事件处理程序。
在SomeMethod3碰巧执行之前,ExecuteParallelAsync应该完全完成。
它怎么可能知道?它是:async void,这意味着它不会向调用方提供任何指示状态的信息。
要做到这一点,它必须是:
private async Task ExecuteParallelAsync() // or ValueTask
Run Code Online (Sandbox Code Playgroud)
您必须在呼叫现场等待
await ExecuteParallelAsync();
Run Code Online (Sandbox Code Playgroud)