private Task TransitionTo(NodeRole newRole, IDictionary <string, string[]> hostArguments) { var startTasks = new ConcurrentBag <Task>(); Parallel.ForEach(_appStarters, starter => { AppFunc chain = null; if (Chains.ContainsKey(starter.Chain)) { chain = Chains[starter.Chain]; } chain = chain ?? starter.GetDefaultChain(GetAppFunctionBuilder(starter.Chain), Environment, ApplicationEnvironment); if (chain != null) { startTasks.Add(starter.BringToState(chain, Environment, ApplicationEnvironment, newRole, hostArguments)); } }); return(Task.WhenAll(startTasks)); }