public void InvokeAsyncTests() { dispatcher = new Dispatcher(true); int executed = 0; Assert.AreEqual(0, dispatcher.Count); //Should invoke synchronously ActionDispatcherTask task = dispatcher.InvokeAsync(() => { executed++; return; }); Assert.AreEqual(0, dispatcher.Count); Assert.AreEqual(1, executed); Assert.AreEqual(DispatcherTaskState.CompletedImmediate, task.TaskState); //Should invoke asynchronously Thread t = new Thread(() => { task = dispatcher.InvokeAsync(() => { executed++; return; }); }); t.Start(); t.Join(); Assert.AreEqual(1, dispatcher.Count); Assert.AreEqual(1, executed); Assert.AreEqual(DispatcherTaskState.Queued, task.TaskState); dispatcher.ExecuteDispatcherTasks(); Assert.AreEqual(0, dispatcher.Count); Assert.AreEqual(2, executed); Assert.AreEqual(DispatcherTaskState.CompletedQueued, task.TaskState); }
public void TestExecuteAsynchronous() { bool set = false; ActionDispatcherTask task = ActionDispatcherTask.Create(() => set = true); Assert.AreEqual(DispatcherTaskState.Queued, task.TaskState); task.Execute(false); Assert.IsTrue(set); Assert.AreEqual(DispatcherTaskState.CompletedQueued, task.TaskState); }
public void TestExecuteException() { Exception exception = new Exception(); ActionDispatcherTask task = ActionDispatcherTask.Create(() => throw exception); Assert.AreEqual(DispatcherTaskState.Queued, task.TaskState); Assert.ThrowsException <DispatcherException>(() => { task.Execute(true); }); Assert.AreEqual(DispatcherTaskState.Failed, task.TaskState); Assert.AreEqual(exception, task.Exception); }
public static void ReturnActionDispatcherTask(ActionDispatcherTask task) { if (!initialized) { ThreadInitialize(); } #if DEBUG ObjectCacheTestHelper.ActionDispatcherTaskWasReturned(); #endif if (!actionDispatcherTaskPool.ReturnInstance(task)) { task.ActuallyDispose(); } }