public BackgroundTaskWrapper(IBackgroundTask task) { if (task == null) { throw new ArgumentNullException(nameof(task)); } _task = task; _taskScheduler = null; //_taskScheduler = new ThreadBoundTaskScheduler(_task.Name); }
public void ThreadBoundTaskSchedulerTest() { var stack = new ConcurrentStack <string>(); var thisId = Thread.CurrentThread.ManagedThreadId; int schedulerId; using (var taskScheduler = new ThreadBoundTaskScheduler()) { var factory = taskScheduler.TaskFactory; schedulerId = taskScheduler.ThreadId; factory.StartNew(() => { stack.Push("1: " + Thread.CurrentThread.ManagedThreadId); Thread.Sleep(100); }); factory.StartNew(() => { stack.Push("2: " + Thread.CurrentThread.ManagedThreadId); Thread.Sleep(100); }); factory.StartNew(() => { stack.Push("3: " + Thread.CurrentThread.ManagedThreadId); Thread.Sleep(100); }); factory.StartNew(() => { stack.Push("4: " + Thread.CurrentThread.ManagedThreadId); Thread.Sleep(100); }); } Assert.AreEqual(4, stack.Count); Assert.AreNotEqual(thisId, schedulerId); Assert.IsTrue(stack.Reverse().SequenceEqual(Enumerable.Range(1, 4).Select(i => i + ": " + schedulerId))); }