1. Для синхронизации есть механизм BeginInvoke/EndInvoke. В документации не описывается четко, обязателен ли EndInvoke, в особенности, если в вызывающем потоке синхронизации не нужно. То есть, когда вызывающий поток не хочет ждать окончания работы вызова в "управляемом" потоке и когда ему по-фигу на результаты.
2. Что будет, если один и тот же делегат вызывается через BeginInvoke 2 и более раз подряд, без вызова EndInvoke.
В примерах смотрел. Во всех присутствует вызов EndInvoke, кроме отдельного случая, где возможна ситуация с обходом вызова EndInvoke (т.е. в вызывающем потоке дается 10 секунд на выполнение асинхронной операции, если операция выполнилась за это время, то вызывается EndInvoke, если нет — то и суда нет — это H:\vs2003\SDK\v1.1\Samples\Technologies\Remoting\Advanced\AsyncDelegate\AsyncDelegate.cs линия 174).
Hello, "drpadawan"
> 1. Для синхронизации есть механизм BeginInvoke/EndInvoke. В документации не описывается четко, обязателен ли EndInvoke, в особенности, если в вызывающем потоке синхронизации не нужно. То есть, когда вызывающий поток не хочет ждать окончания работы вызова в "управляемом" потоке и когда ему по-фигу на результаты.
>
А в чем сложность вызвать EndInvoke в callback методе передаваемом в BeginInvoke?
> 2. Что будет, если один и тот же делегат вызывается через BeginInvoke 2 и более раз подряд, без вызова EndInvoke.
>
Если возвращаемые значения не интересуют то, для делегата это никак не критично. Хотя, могут быть ситуации когда, делегат возвращает достаточно "тяжелый" объект для которого стоит явно освобождать. В подобном случае, стоит вызвать EndInvoke и освободить объект.
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.