Блокирует ли Parallel.ForEach?

Работает ли .netParallel.ForEach заблокировать вызывающий поток? Мое предположение относительно поведения является одним из них:

Yes, it blocks until the slowest item executing returns. No, it doesn't block and returns control immediately. The items to run in parallel are done on background threads.

Или, может быть, что-то еще происходит, кто-нибудь знает наверняка?

Этот вопрос возник при реализации этого в классе журналирования:

<code>public class MultipleLoggingService : LoggingServiceBase
{
    private readonly List<LoggingServiceBase> loggingServices;

    public MultipleLoggingService(List<LoggingServiceBase> loggingServices)
    {
        this.loggingServices = loggingServices;
        LogLevelChanged += OnLogLevelChanged;
    }

    private void OnLogLevelChanged(object sender, LogLevelChangedArgs args)
    {
        loggingServices.ForEach(l => l.LogLevel = LogLevel);
    }

    public override LogMessageResponse LogMessage(LogMessageRequest request)
    {
        if (request.LogMessage)
            Parallel.ForEach(loggingServices, l => l.LogMessage(request));

        return new LogMessageResponse{MessageLogged = request.LogMessage};
    }
}
</code>

Обратите внимание наLogMessage Метод вызывает некоторые другие службы регистрации. Мне нужно, чтобы эта часть вернулась немедленно, чтобы она не блокировала вызывающий поток.

Обновление: на основе комментариев от других (мы подтвердили, что поведение # 1). Поэтому я принял совет, чтобы использоватьзадача библиотека и переписать цикл следующим образом:

<code>          if (request.LogMessage)
            foreach (var loggingService in loggingServices)
                Task.Factory.StartNew(() => loggingService.LogMessage(request));
</code>

Ответы на вопрос(2)

Ваш ответ на вопрос