2014-09-05 2 views
2

예외 후 Try 블록을 계속 시도합니다.캐치 블록 후 계속하십시오.

Try 
    action1() 
    action2() 
    action3() 
    action4() 
Catch 
    Log() 

그리고 action2에서 발견 된 오류가 캐치로 이동하는 경우, 로깅을하고 action3, action4 계속;
내 말은

어떻게하면됩니까?

답변

0

당신은이 방법에 대한 매개 변수로 Action를 사용할 수 있습니다

Public Shared Function TryAction(action As Action) As Boolean 
    Dim success As Boolean = True 
    Try 
     action() 
    Catch ex As Exception 
     success = False 
     Log() 
    End Try 
    Return success 
End Function 

지금이 작품 :

TryAction(AddressOf action1) 
TryAction(AddressOf action2) 
TryAction(AddressOf action3) 
TryAction(AddressOf action4) 

고전적인 방법은 여러 Try-Catch 사용 :

Try 
    action1() 
Catch 
    Log() 
End Try 
Try 
    action2() 
Catch 
    Log() 
End Try 
Try 
    action3() 
Catch 
    Log() 
End Try 
Try 
    action4() 
Catch 
    Log() 
End Try 
+0

그것은 좋은 hwould, 그러나 때때로 나는하지 알려진 요소를 사용해야합니다. 나는 시도에서 foreach를 사용해야하고 catch에서 나는 try 블록으로 돌아가서 그것을 계속해야 함을 의미합니다. – Gabor85

+0

@ Gabor85 :'catch'에서'try'로 돌아갈 수 없습니다. 당신이 할 수있는 것은'catch '('ReTryTenTimes'- 함수처럼) 후에'try'를 반복하는 것입니다. 이 방법으로도 할 수 있습니다. 예를 들면 다음과 같습니다.'Dim success = False Dim retries = 10 성공하지 못함 AndAlso 재시도 <10 success = TryAction (AddressOf action1) 성공하지 못하면 다시 시도 = + 1 End While' –

0

이 한번에 이동을/Block을 Action() 메소드에 넣는다. 이렇게하면 필요한 경우 각 메소드의 예외에 다르게 응답 할 수 있습니다.

Sub Main() 
    action1() 
    action2() 
    action3() 
    action4() 
End Sub 

Sub Action1() 
    Try 
    '' do stuff 
    Catch 
    Log() 
    End Try 
End Sub 

Sub Action2() 
    Try 
    '' do stuff 
    Catch 
    Log() 
    End Try 
End Sub 

Sub Action3() 
    Try 
    '' do stuff 
    Catch 
    Log() 
    End Try 
End Sub 

Sub Action4() 
    Try 
    '' do stuff 
    Catch 
    Log() 
    End Try 
End Sub 
1

여기에 예를 들어 사용하는 배열입니다 :

For Each a As Action In {New Action(AddressOf action1), New Action(AddressOf action2), New Action(AddressOf action3), New Action(AddressOf action4)} 
    Try 
     a.Invoke() 
    Catch ex As Exception 
     Log(ex) 
    End Try 
Next 
관련 문제