Из статьи MSDN 'Асинхронный вызов синхронных методов' :
Независимо от того, какую технику вы используете,
всегда вызывайте EndInvoke, чтобы завершить
асинхронный вызов.
Теперь есть теория, а затем есть практика. Как и многие другие разработчики до вас, вы обнаружили, что часто можете игнорировать это задокументированное требование. Это может быть деталь реализации, действительно ли EndInvoke
делает что-то абсолютно необходимое, чтобы предотвратить сбой вашего приложения, утечку памяти и т. Д. Но вот в чем дело: если это задокументированное требование, вам действительно следует это сделать . Это не просто теория; речь идет о защите себя в случае перемен.
Задокументировав это требование, разработчики этого механизма асинхронного вызова в основном предоставили себе свободу изменить способ, которым BeginInvoke
и EndInvoke
работают по линии связи так, чтобы, если имелась достаточная причина (например, повышение производительности) , EndInvoke
может внезапно стать намного более необходимым. Предположим, что это внезапно приведет к тупику, если вы забудете об этом. Они уже укрылись, сказав всегда звоните EndInvoke
; если ваше приложение перестает работать, потому что вы не выполнили это требование, ответственность лежит на вас.
Я не говорю, что это вероятный сценарий. Моя точка зрения заключается в том, что вы не должны - или, по крайней мере, я бы не - спросить: "Это действительно необходимо?" с менталитетом Если мне удастся избежать этого, тогда я , поскольку задокументировано , что вы должны это сделать.