public async Task<IEndpointInstance> Start()
{
DetectThrottlingConfig();
await transportInfrastructure.Start().ConfigureAwait(false);
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
var mainPipeline = new Pipeline<ITransportReceiveContext>(builder, settings, pipelineConfiguration.Modifications);
var receivers = CreateReceivers(mainPipeline);
await InitializeReceivers(receivers).ConfigureAwait(false);
var featureRunner = await StartFeatures(messageSession).ConfigureAwait(false);
var runningInstance = new RunningEndpointInstance(settings, builder, receivers, featureRunner, messageSession, transportInfrastructure);
// set the started endpoint on CriticalError to pass the endpoint to the critical error action
criticalError.SetEndpoint(runningInstance);
StartReceivers(receivers);
return runningInstance;
}