public Job Queue(Action<JobStatus> action) { var job = new Job { Id = Guid.NewGuid(), Started = false, Status = new JobStatus() }; var guard = new object(); ThreadPool.QueueUserWorkItem(o => { lock (guard) job.Started = true; action(job.Status); lock (guard) { job.Status.SetProgess(1, "Done"); job.Complete = true; } }); _jobs[job.Id] = job; return job; }