Completion handlers are called after some long running process has returned, which means that you don't really have a way to determine whether or not your reference is valid without [weak].
Tasks, on the other hand, will immediately (or almost immediately) execute. And in your code the very first thing you're going to do is guard self... which means from that point onward self is captured just as if you'd never done it in the first place.
In which case the code is wasted effort, and accomplishes nothing.
The next line was await eventSubscriber.subscribe, which means your strong reference is now sitting around, waiting.
Tasks closures are marked with @_implicitSelfCapture with the idea that all tasks will eventually complete, releasing captured objects and making retain cycles irrelevant. Hiding explicit use of self was a deliberate design choice indicating that normal capture semantics and concerns do not apply.
If you're interested in not doing more work in a Task due to cancellation, then Task.isCancelled or try Task.checkCancellation() is your friend here.