Unit testing multithreaded code is fraught with difficulty if you want a deterministic behavior of the test. Usually involving lots of ManualResetEvent to control the flow of control.
It should still be possible however, assuming you can control the processing inside the item. For example
myProcessingQueue.Enqueue(() => releaseTask.WaitOne());
var disposeTask = Task.Run(() => myProcessingQueue.Dispose());
// the dispose task should not complete since
// the task is blocked on releaseTask.WaitOne()
Assert.IsFalse(disposeTask.Wait(100));
// Release the task to allow the dispose method to complete
releaseTask.Set();
// wait to ensure the dispose actually does complete
Assert.IsTrue(disposeTask.Wait());
This is not a total guarantee, since it might be possible for the disposeTask to have (incorrectly) completed after 101ms instead of 100ms, but I'm not sure how, or even if, that problem can be fixed. But I hope this approach might be usefull in at least some cases.