Как я могу асинхронно присоединиться к первоначальному потоку после завершения?

Хотя я не думаю об этом как о конкретном вопросе Ваадина. Все, что мне действительно нужно сделать, - это вернуться в нить, которую будущее создаст по завершении.

(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 Особенность Ваадина.

Другие вопросы по тегам