private static void InternalStartJob(Job job)
        {
            TaskDefinition td;
            var tokenSource = new CancellationTokenSource();
            var ct = tokenSource.Token;

            if (job.Cancelled)
                tokenSource.Cancel();

            var task = new Task<object>(() =>
            {
                ct.ThrowIfCancellationRequested();

                return new AppDomainLoader(job, ct).RunJob<object>();
            }, ct);

            _startedJobs.GetOrAdd(job.Id, new TaskDefinition(task, tokenSource));

            if (task.Status != TaskStatus.Canceled)
            {
                task.ContinueWith(t => _completedJobsDateTimes.GetOrAdd(job.Id, DateTime.Now));
                task.Start();
            }
        }
 public void StartJob(Job job)
 {
     _queuedJobs.Enqueue(job);
 }