Вопрос больше философский, поэтому сильно не пинайте.
Хочется иметь гарантию, что процедуры завершения для какого-либо объекта, поддерживающего асинхронные операции, будут вызываться в одном и том же потоке.
Дабы избавиться от лишней синхронизации.
Например. Серверное приложение, зааксептили соединение от клиента, привязали его к какому-то потоку (к какому — неважно. например, к тому который сейчас меньше всего клиентов обслуживает). Затем, оповещения о всех наших асинхронных операциях на этом сокете приходят в этот поток. Т.е. сериализованы — синхронизация не нужна.
Далее, если для обслуживания этого клиента нам нужны еще какие-то асинхронные объекты (например файл, таймер, пайп — что угодно), мы всех их привязываем к потоку обслуживающему данного клиента. Таким образом, оповещения о завершении асинхронных операций на этих объектах, опять же приезжают в наш поток. Синхронизации не нужно. Код превращается в аккуратный
конечный автомат безо всяких лишних блокировок (если нужно шарить данные с другими сессиями — там блокироки нужны, если у нас таких потоков больше одного).
Т.е. получаем нечто вроде легких потоков.
В неуправляемом коде (или с использованием интеропа) делается просто — заводим N completion port-ов, N потоков, добавляем некий load-balancer и вуаля.
Есть ли идеи как это реализовать используя родные .NET классы и не городя кучу интеропа? Всем спасибо за идеи
... << RSDN@Home 1.2.0 alpha 4 rev. 1228>>