Yes, the thread pool will wait for the Cancellation Token's wait handle to be signaled indefinitely.
You need to save the return value of RegisterWaitForSingleObject()
in order to cancel the outstanding wait operation. See ThreadPool.RegisterWaitForSingleObject Remarks section as it indicates you should always unregister waits.
The outstanding wait operation should not keep your process alive though.