public async Task <Result> StartDataServer() { if (EC2Client == null || TaskConfigurationService == null) { return new Result() { ErrorCode = Constants.ErrorCodes.FAILURE } } ; InstanceConfiguration instanceConfiguration = TaskConfigurationService.GetDataPreparationConfiguration(); var runInstanceResponse = await Instances.LaunchInstance(EC2Client, instanceConfiguration); var instanceId = runInstanceResponse.Reservation.Instances[0].InstanceId; bool isInstanceRunning = false; DescribeInstanceStatusResponse describeInstanceStatusResponse; GetInstanceStatusRequestConfiguration instanceStatusReqConfig = new GetInstanceStatusRequestConfiguration() { InstanceIds = new List <string>() { instanceId }, IncludeAllInstances = true }; // timeout? while (!isInstanceRunning) { describeInstanceStatusResponse = await Instances.GetInstanceStatus(EC2Client, instanceStatusReqConfig); var instance = describeInstanceStatusResponse.InstanceStatuses.Where(i => i.InstanceId == instanceId) .FirstOrDefault(); if (instance != null) { switch (instance.InstanceState.Code) { case INSTANCE_STATE_CODE_PENDING: continue; case INSTANCE_STATE_CODE_RUNNING: isInstanceRunning = true; break; default: throw new System.Exception("Instance stopped."); } } else { throw new System.Exception("Instance not found."); } } return(new Result { ErrorCode = Constants.ErrorCodes.OK }); }