oooo nice! So yeah, you will need to figure out why you can't do a cancel call and have it properly cancel the task. you need to do that during vap delete / teardown because that path isn't async and thus you need them to block waiting for whatever is stopping your task cancel from succeeding.
Do you have a diff available? I'd love to review it. Thanks! -adrian