How do I code to take action when a VBO (bulk action) is finished?
This is how I tackled this scenario in D7.

In my custom VBO code I did a variable_set() and then I use hook_views_pre_render (note that the D8 hook params changed, so don't copy the hook from my code below) and did a variable_get(), if it was not empty, then do your action. 

/**
 * Implements hook_views_pre_render().
 */

function bulk_mail_hauliers_auto_emailing_views_pre_render(&amp;$view) {
// check the view name
if ($view-&gt;name == 'hauliers_auto_emailing') {

    $store_all_in_one_en = variable_get('bulk_mail_hauliers_auto_emailing_all_in_one_en', 0); 

    // check that variable_get is not empty, which means VBO ran.
    if ($store_all_in_one_en != 0) {

      // CUSTOM ACTION GOES HERE

      // delete the variable
      variable_del('bulk_mail_hauliers_auto_emailing_all_in_one_en');

    }

}


So you can basically do this in D8, except use the D8 equivalent of variable_set,get,del.