У вас есть асинхронные версии чтения и записи (функции begin/end), но не удаление (что я могу сказать). Есть ли причина для этого? Разве не так много причин для асинхронного удаления, как чтение/запись?
Использование потоковой обработки для имитации асинхронного поведения - это не то же самое, что асинхронные функции. Большая разница, конечно, вы получаете воспринимаемую параллельную обработку, но на самом деле это не предотвращает блокировку, что другой поток по-прежнему заблокирован, ожидая завершения ввода/вывода файла. Реальные асинхронные функции (начальные/конечные функции) работают на системном уровне, они ставят в очередь файл ввода/вывода, позволяют приложению продолжить работу и сообщают приложению, когда он готов продолжить работу с файлом i/o (позволяя вам делать другие вещи, пока вы ждете ввода/вывода файла).