public async Task CreateJobAsync(CreateJobOptions createJobOptions)
        {
            CloudJob unboundJob = this.Client.JobOperations.CreateJob();

            unboundJob.Id = createJobOptions.JobId;
            unboundJob.Priority = createJobOptions.Priority;
            unboundJob.Constraints = new JobConstraints(createJobOptions.MaxWallClockTime, createJobOptions.MaxRetryCount);

            PoolInformation poolInformation = new PoolInformation();
            if (createJobOptions.AutoPoolOptions.UseAutoPool.HasValue && createJobOptions.AutoPoolOptions.UseAutoPool.Value)
            {
                AutoPoolSpecification autoPoolSpecification = new AutoPoolSpecification()
                {
                    AutoPoolIdPrefix = createJobOptions.AutoPoolOptions.AutoPoolPrefix,
                    KeepAlive = createJobOptions.AutoPoolOptions.KeepAlive,
                    PoolLifetimeOption = (PoolLifetimeOption)Enum.Parse(typeof(PoolLifetimeOption), createJobOptions.AutoPoolOptions.LifeTimeOption),
                    PoolSpecification = new PoolSpecification()
                    {
                        OSFamily = createJobOptions.AutoPoolOptions.OSFamily,
                        VirtualMachineSize = createJobOptions.AutoPoolOptions.VirutalMachineSize,
                        TargetDedicated = createJobOptions.AutoPoolOptions.TargetDedicated
                    }
                };

                poolInformation.AutoPoolSpecification = autoPoolSpecification;
            }
            else
            {
                poolInformation.PoolId = createJobOptions.PoolId;
            }

            unboundJob.PoolInformation = poolInformation;

            if (createJobOptions.CreateJobManager.HasValue && createJobOptions.CreateJobManager.Value == true)
            {
                JobManagerTask jobManager = new JobManagerTask()
                {
                    CommandLine = createJobOptions.JobManagerOptions.CommandLine,
                    KillJobOnCompletion = createJobOptions.JobManagerOptions.KillOnCompletion,
                    Id = createJobOptions.JobManagerOptions.JobManagerId
                };

                jobManager.Constraints = new TaskConstraints(
                    createJobOptions.JobManagerOptions.MaxTaskWallClockTime, 
                    createJobOptions.JobManagerOptions.RetentionTime, 
                    createJobOptions.JobManagerOptions.MaxTaskRetryCount);

                unboundJob.JobManagerTask = jobManager;
            }

            await unboundJob.CommitAsync();
        }
 public Task CreateJobAsync(CreateJobOptions options)
 {
     return this.Service.CreateJobAsync(options);
 }
        private async Task CreateJobScheduleAsync()
        {
            try
            {
                if (this.IsInputValid())
                {
                    string osFamilyString;
                    if (Common.SupportedOSFamilyDictionary.ContainsKey(this.SelectedOSFamily))
                    {
                        osFamilyString = Common.SupportedOSFamilyDictionary[this.SelectedOSFamily];
                    }
                    else
                    {
                        osFamilyString = this.SelectedOSFamily;
                    }

                    CreateJobOptions options = new CreateJobOptions()
                    {
                        CreateJobManager = this.IsCreateJobManagerSelected,
                        MaxRetryCount = Common.GetNullableIntValue(this.MaxRetryCount),
                        MaxWallClockTime = this.MaxWallClockTime,
                        Priority = Common.GetNullableIntValue(this.Priority),
                        JobId = this.JobId,
                        PoolId = this.PoolId,
                        AutoPoolOptions = new CreateAutoPoolOptions()
                        {
                            AutoPoolPrefix = this.AutoPoolPrefix,
                            LifeTimeOption = this.SelectedLifetimeOption,
                            KeepAlive = this.SelectedKeepAliveItem,
                            OSFamily = osFamilyString,
                            SelectedLifetimeOption = this.SelectedLifetimeOption,
                            TargetDedicated = this.TargetDedicated,
                            UseAutoPool = this.UseAutoPool,
                            VirutalMachineSize = this.SelectedVirtualMachineSize
                        },
                        JobManagerOptions = new CreateJobManagerOptions()
                        {
                            CommandLine = this.CommandLine,
                            JobManagerId = this.JobManagerId,
                            KillOnCompletion = this.KillOnCompletionSelectedItem,
                            MaxTaskRetryCount = Common.GetNullableIntValue(this.MaxRetryCount),
                            MaxTaskWallClockTime = this.MaxTaskWallClockTime,
                            RetentionTime = this.RetentionTime
                        }
                    };

                    await this.batchService.CreateJobAsync(options);

                    Messenger.Default.Send<RefreshMessage>(new RefreshMessage(RefreshTarget.Jobs));

                    Messenger.Default.Send(new GenericDialogMessage(string.Format("Successfully created job {0}", this.JobId)));
                    this.JobId = string.Empty; //So that the user cannot accidentally try to create the same job schedule twice
                }
            }
            catch (Exception e)
            {
                Messenger.Default.Send<GenericDialogMessage>(new GenericDialogMessage(e.ToString()));
            }
        }