private void ExecuteJob(Job job, IWorker worker)
 {
     try
     {
         Log.Debug("Dispatching {0} to {1}", job.GetType().FullName, worker.GetType().FullName);
         worker.Execute(job, ProcessAsCompleted, CancellationTokenForExecutionOfJob);
     }
     finally
     {
         FinalizeWorker(worker);
     }
 }
        private void DispatchJob(Job job)
        {
            var configuration = Repository.Settings.JobConfigurations.Single(c => c.JobAndWorkerType.JobType.Type == job.GetType());

            ApplyConfigurationToJob(job, configuration);

            var worker = InitializeWorkerAndJob(job);

            Log.DispatcherActivity(Repository.Settings.DispatcherId, DispatcherActivity.JobWasDispatched, job, job.ExecutionStatus, job.ExecutionStatus);

            ExecuteJob(job, worker);
        }