Вот пример:
if (control.InvokeRequired)
{
control.BeginInvoke(action, control);
}
else
{
action(control);
}
Что делать, если между условием и вызовом BeginInvoke элемент управления удаляется, например?
Другой пример, связанный с событиями:
var handler = MyEvent;
if (handler != null)
{
handler.BeginInvoke(null, EventArgs.Empty, null, null);
}
Если MyEvent
отменяется между первым строка и оператор if, оператор if все равно будет выполняться. Однако правильный ли это дизайн? Что, если с отказом от подписки также произойдет разрушение состояния, необходимого для правильного вызова события? В этом решении не только больше строк кода (шаблон), но и оно не так интуитивно понятно и может привести к неожиданным результатам на стороне клиента.
Что ты скажешь, ТАК?