GTH*_*ten 1 c# task task-parallel-library async-await .net-core
我有一个使用MEF加载插件的应用程序.所有这些插件都符合以下界面:
public interface IPlugin {
Task Start();
}
Run Code Online (Sandbox Code Playgroud)
所有方法都实现为async:public async Task Start()
当应用程序运行时,我有一个IEnumerable<IPlugin>可用于所有插件的属性.问题基本上是我如何Start()并行运行所有方法并等待所有方法完成?
我知道Parallel.ForEach(plugins, plugin => plugin.Start()),但这是不可能的,并且在所有插件启动之前执行仍在继续.
最有希望的解决方案似乎是Task.WhenAll(),但我不知道如何在不添加一些脚手架(这似乎是开销)的情况下将未知的方法列表发送到此.
我怎么能做到这一点?
这是一个单行:
await Task.WhenAll(plugins.Select(p => p.Start()));
Run Code Online (Sandbox Code Playgroud)
插件将异步运行,但不是并行运行.如果由于某种原因需要显式地将插件分派给线程池,可以Task.Run使用asynclambda 添加Select.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |