Как я могу асинхронно присоединиться к первоначальному потоку после завершения?
Хотя я не думаю об этом как о конкретном вопросе Ваадина. Все, что мне действительно нужно сделать, - это вернуться в нить, которую будущее создаст по завершении.
(ClickHandler) (event) -> {
log().debug( "current Thread {}", Thread.currentThread().getId() );
viewModel.generateFileDownload().thenAccept( this::download );
// needs to continue to this immediately, note: there are similarly vaadin reasons why you can't just block here.
button.setEnabled( false );
}
private void download( final File file ) {
// do stuff that needs to happen in the original thread
log().debug( "current Thread {}", Thread.currentThread().getId() );
button.setEnabled( true );
}
Мне нужно, чтобы эти идентификаторы потоков были одинаковыми, очевидно, я могу переделать это. Я знаю, что есть соединение, но теперь уверен, как это поможет мне, когда я не хочу возвращаться до завершения?
1 ответ
Для вашей конкретной проблемы вы должны просто использовать
Button button = new Button("Download");
button.setDisableOnClick(true); //after creating the button
а также
button.setEnabled(true); //after using the button, in click handler
Обратите внимание, что это особенность в Button
, Для более сложных случаев вы должны использовать @Push
Особенность Ваадина.