Inheritance: IAsyncTaskExecutor
        public void RunTestASynchronousExecutor()
        {
            SimpleJobLauncher launcher = new SimpleJobLauncher();
            IJobInstanceDao jobInstanceDao = new MapJobInstanceDao();
            IJobExecutionDao jobExecutionDao = new MapJobExecutionDao();
            IStepExecutionDao stepExecutionDao = new MapStepExecutionDao();
            IExecutionContextDao executionContextDao = new MapExecutionContextDao();

            IJobRepository jobRepository =
                new SimpleJobRepository(jobInstanceDao, jobExecutionDao, stepExecutionDao, executionContextDao);
            launcher.JobRepository = jobRepository;

            DefaultJobParametersConverter converter = new DefaultJobParametersConverter();
            NameValueCollection props2 = new NameValueCollection
            {
                {"+dateDebut(date)", "1970/07/31"},
                {"+everything(long)", "42"},
                {"-balance(double)", "1000.0"},
                {"+name(string)", "thierry"},
                {"-default", "default"}
            };
            JobParameters jobParameters = converter.GetJobParameters(props2);

            IJob job = new SimpleJob("myTestJob");
            job.JobParametersValidator = new DummyValidator();
            job.Restartable = false;
            TaskletStep step = new TaskletStep("simpleTS")
            {
                JobRepository = jobRepository,
                Tasklet = new MyDummyTasklet2()
            };
            ((SimpleJob)job).AddStep(step);
            ((SimpleJob)job).JobRepository = jobRepository;
            ITaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
            launcher.TaskExecutor = taskExecutor;
            JobExecution jobExecution = launcher.Run(job, jobParameters);
            //wait for execution end (asynchronous)            
            Assert.IsFalse(jobExecution.Status.IsUnsuccessful());
            Assert.IsFalse(jobExecution.Status.IsRunning());
        }
        public void RunTestSystemCommandTasklet()
        {
            SimpleJobLauncher launcher = new SimpleJobLauncher();
            IJobInstanceDao jobInstanceDao = new MapJobInstanceDao();
            IJobExecutionDao jobExecutionDao = new MapJobExecutionDao();
            IStepExecutionDao stepExecutionDao = new MapStepExecutionDao();
            IExecutionContextDao executionContextDao = new MapExecutionContextDao();

            IJobRepository jobRepository =
                new SimpleJobRepository(jobInstanceDao, jobExecutionDao, stepExecutionDao, executionContextDao);
            launcher.JobRepository = jobRepository;

            DefaultJobParametersConverter converter = new DefaultJobParametersConverter();
            NameValueCollection props2 = new NameValueCollection
            {
                {"+dateDebut(date)", "1970/07/31"},
                {"+everything(long)", "42"},
                {"-balance(double)", "1000.0"},
                {"+name(string)", "thierry"},
                {"-default", "default"}
            };
            JobParameters jobParameters = converter.GetJobParameters(props2);

            IJob job = new SimpleJob("myTestJob");
            job.JobParametersValidator = new DummyValidator();
            job.Restartable = false;
            TaskletStep step = new TaskletStep("simpleTS") {JobRepository = jobRepository};
            SystemCommandTasklet tasklet = new SystemCommandTasklet
            {
                Command = "DEL MyDummyTasklet2_out_*.txt",
                WorkingDirectory = "C:/temp",
                Timeout = 10000000,
                SystemProcessExitCodeMapper = new SimpleSystemProcessExitCodeMapper()
            };
            step.Tasklet = tasklet;
            step.RegisterStepExecutionListener(tasklet);
            ((SimpleJob)job).AddStep(step);
            ((SimpleJob)job).JobRepository = jobRepository;
            ITaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
            launcher.TaskExecutor = taskExecutor;
            JobExecution jobExecution = launcher.Run(job, jobParameters);
            //wait for execution end (asynchronous)            
            Assert.IsFalse(jobExecution.Status.IsUnsuccessful());
            Assert.IsFalse(jobExecution.Status.IsRunning());
        }