例外発生時に再試行するEnumerable#retry_if
こんにちは。那由多屋の加藤です。
最近、「ある例外が発生した場合は、n回の再試行を行う」というコードを書くことが多かったので、一般化してメソッド化してみました。
例えば、GAE/JRubyではAppEngine::Datastore::Timeoutが低くない頻度で発生しますが、単純に再試行するだけで成功したりします。Enumerable#retry_ifメソッドを使えば、下記のようにシンプルに記述できます。
entries = 3.times.retry_if(AppEngine::Datastore::Timeout) { Entry.all }
Enumerable#retry_ifのコードとテストは、gistにアップロードしました。gist:293358。
イマイチ名前が気に入らないので、良い名前を募集中!