operation subclasses will now override willFinish instead of finish to preserve multithreaded safety