This was brought up in the mailing list, and I thought it was an interesting solution, therefore, this post.
A couple of things to note here. I would actually rather use the Initialize() / Dispose() methods for this, but the problem is that we don’t really have a way at the Dispose() to know if the action threw an exception. Hence, the need to capture the ExecuteAsync() operation.
For fun, you can also use the async session as well, which will integrate very nicely into the async nature of most of the Web API.