Тихая смерть колбэка TcpListener.BeginAcceptTcpClient
От: LWhisper  
Дата: 25.07.16 09:13
Оценка:
Всем привет!

Столкнулся со странной ситуацией, которую пока не удаётся понять.
Есть TcpListener, который принимает входящие соединения посредством BeginAcceptTcpClient.

Есть следум идущий за ним SslStream.AsyncAuthenticateAsServer.
После подключения и обмена рукопожатиями, начинает выполняться колбэк.

Поток из пула сообщает, что начал обрабатывать запрос и на этом тихо исчезает.
Много позже, всплывает поток с тем же ManagedThreadId, который вырвали из пула для обработки асинхронной задачи, к первоначальной отношения не имеющей.

Единственные необработанные исключения в данном случае — ThreadAbort и ThreadInterrupt.
Поскольку в различных тёмных закоулках нашего кода Thread.Abort используется, два вопроса:

1) Поток из пула, вызванный для асинхронной операции, возвращается в пул, повиснув на Monitor.Enter?
1.1) Если да, что произойдёт при вызове Abort для него в процессе выполнения другой операции, в то время, как первая не завершена?
2) Может ли .NET сам отменять выполнение коллбека BeginAcceptTcpClient или AsyncAuthenticateAsServer без явного обращения к CancelationToken?
task async threading thread abort tpl
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.