Hi Georgy,
my understanding is that async executions are picked up by the job executor, so the following might work and "restart" the excution for an async execution which was "lost".
ManagementService managementService = processEngine.getManagementService();
Job job = managementService.createJobQuery().processInstanceId(id).uniqueResult();
managementService.executeJob(job.getId());
...it's just a guess