Executes the given block function on this resource and then closes it down correctly whether an exception is thrown or not.