I don't like much that there is hidden side effect of waiting ( for timeout ).
I prefer something like have timeout outside ( you actually do double timeout which is confusing )