protected virtual void Dispose(bool disposing) { if (disposing) { var worker = _worker; if (worker != null) { lock (_workerQueue) { _workerQueue.Clear(); _workerQueue.Enqueue(WorkerMessage.Abort()); _workerQueueChanged.Set(); } bool stopped = worker.Join(10000); Debug.Assert(stopped, "Failed to terminate TaskProvider worker thread"); } lock (_itemsLock) { _items.Clear(); } if (_taskList != null) { _taskList.UnregisterTaskProvider(_cookie); } _workerQueueChanged.Dispose(); } }
private void Dispose(bool disposing) { if (disposing) { var worker = _worker; if (worker != null) { Log("Sending abort... {0}", DateTime.Now); lock (_workerQueue) { _workerQueue.Clear(); _workerQueue.Enqueue(WorkerMessage.Abort()); _workerQueueChanged.Set(); } Log("Waiting for abort... {0}", DateTime.Now); bool stopped = worker.Join(10000); Log("Done Waiting for abort... {0} {1}", DateTime.Now, stopped); Debug.Assert(stopped, "Failed to terminate TaskProvider worker thread"); } lock (_itemsLock) { _items.Clear(); } if (_taskList != null) { _taskList.UnregisterTaskProvider(_cookie); } _workerQueueChanged.Dispose(); } }