Реализация .NET TcpClient/NetworkStream, поддерживающая асинхронные операции и учитывающая тайм-ауты

Судя по количеству вопросов, сообщений на форумах и т. д., кажется, что в реализации TcpClient/NetworkStream в BCL отсутствует достойная поддержка отмены операций ввода-вывода. С добавлением асинхронных методов в .NET 4.5 это отсутствие отмены (или приличной поддержки тайм-аута) делает ситуацию еще более неприятной, поскольку становится еще сложнее (почти невозможно) отменить задачу, которая отказывается отслеживать свой CancellationToken во время выполнения ввода-вывода. .

Я видел много реализаций, которые запускают дополнительные потоки для мониторинга работы сети и закрывают базовый поток, если кажется, что что-то идет не так. Это кажется очень грязным в мире, где мы пытаемся сохранить эти ресурсы, используя асинхронные операции.

Может ли кто-нибудь указать мне руководство по эффективной отмене/тайм-ауту сетевых операций ввода-вывода или надежной сторонней реализации, которая действительно работает?

5
задан Andrew 7 June 2012 в 10:31
поделиться