在我的应用程序管道中有一个选项,可以注入一组预请求处理程序,这些处理程序可以在请求首次进入管道时改变请求。管道是完全异步的,因此这些预请求处理程序调用(以及其他所有内容)都必须等待。我有几种不同的调用这些处理程序的方式,我想知道它们之间是否有任何区别,如果有,那么区别是什么?例如,各种处理程序是否按相同顺序调用?哪个选项可能提供最佳性能?
选项1: foreach
选项2:ForEach()
选项1: foreach
foreach (var handler in this.preRequestHandlers)
{
await handler.Handle(request);
}
选项2:ForEach()
this.preRequestHandlers.ForEach(async handler => await handler.Handle(request));
Option 3: Task.WhenAll()
await Task.WhenAll(this.preRequestHandlers.Select(handler => handler.Handle(request)));
handler.Handle
创建的线程数,可能是零)。 - Servy