since this is looping over multiple streams, it seems even more likely that it should defer the propagation of any exception until after all close operations have been attempted