Столкнулся со странной ситуацией, которую пока не удаётся понять.
Есть TcpListener, который принимает входящие соединения посредством BeginAcceptTcpClient.
Есть следум идущий за ним SslStream.AsyncAuthenticateAsServer.
После подключения и обмена рукопожатиями, начинает выполняться колбэк.
Поток из пула сообщает, что начал обрабатывать запрос и на этом тихо исчезает.
Много позже, всплывает поток с тем же ManagedThreadId, который вырвали из пула для обработки асинхронной задачи, к первоначальной отношения не имеющей.
Единственные необработанные исключения в данном случае — ThreadAbort и ThreadInterrupt.
Поскольку в различных тёмных закоулках нашего кода Thread.Abort используется, два вопроса:
1) Поток из пула, вызванный для асинхронной операции, возвращается в пул, повиснув на Monitor.Enter?
1.1) Если да, что произойдёт при вызове Abort для него в процессе выполнения другой операции, в то время, как первая не завершена?
2) Может ли .NET сам отменять выполнение коллбека BeginAcceptTcpClient или AsyncAuthenticateAsServer без явного обращения к CancelationToken?