Sorry for the delay.
This works but it looks fragile. I haven't actually checked, but is there any other way that the same async can be terminated twice? If so, is it correct to buffer the second termination (and not, say, buffer a third?) If not, should we make this explicitly a boolean flag ('canceled' I guess?) Or at least add some asserts to communicate exactly when this is supposed to happen?