2
ronin: код после конструкции Try.. Except..End тоже выполнится всегда - зачем finally? ^_^ И вообще, этот finally уж очень похож на войну с exception'ами. Или не понимаю его назначения... Вообще, никогда этот finally не пользовал, сейчас решил - получилось такое:
- Код: Выделить всё
Try
Try
For i := 0 To bProcesses.Count - 1 Do
TProcess(bProcesses[i]).Terminate(3);
bProcesses.Clear;
For i := 0 To bCameras.Count Do
Begin
aCamera := BCameraClass(bCameras[i]);
bProcesses.Add(BuildProcess(aCamera));
End;
Except On E: Exception Do
SafeLog(E.Message);
End;
Finally
bSession.Leave;
End;
потом подумал - а зачем мне здесь finally? Переписал:
- Код: Выделить всё
bSession.Enter;
Try
For i := 0 To bProcesses.Count - 1 Do
TProcess(bProcesses[i]).Terminate(3);
bProcesses.Clear;
For i := 0 To bCameras.Count Do
Begin
aCamera := BCameraClass(bCameras[i]);
bProcesses.Add(BuildProcess(aCamera));
End;
Except On E: Exception Do
SafeLog(E.Message);
End;
bSession.Leave;
Ведь как понимаю, bSession.Leave вызовется в любом случае, значит и никакого отличия от варианта с Finally нет, а 3 строчки и, что важнее, отступ сэкономлены. Опять подумал - а зачем вообще нужен finally, если подобная конструкция функциональней и немногословней... И вот этот топик ^_^