Концептуально это правильный подход, хотя я не поймал бы каждое исключение, см. Ответ @ 0xA3.
Вы можете сделать его немного «красивее», отделив логику повторения от реального кодаНапример:
Sub TryExecute(Of T As Exception)(ByVal nofTries As Integer,
ByVal anAction As Action)
For i As Integer = 1 To nofTries - 1
Try
anAction()
Return
Catch ex As T
Thread.Sleep(2000)
End Try
Next
' try one more time, throw if it fails
anAction()
End Sub
Что может быть использовано следующим образом:
TryExecute(Of SomeExceptionType)(3, Sub()
<Block>
End Sub())
Это будет работать только в VB 10, если вы используете .Net 3.5 / VB 9, вам нужноотделить это в отдельной функции