cancel on shared thread instead of generically in the background
cancel faster