For asynchronous scan, we will send scan request to region server in background, and once there is a scan result returned from the region server, we can issue the next scan request. And in fact, we still do not have the ability to actually 'cancel' a scan request which is running at region server side, what we call a 'terminate', is to just stop issuing new scan request from client side.
The terminate call in ScanController just tells the background task to stop sending new request to region server, and it is only valid when you have finished a scan request and get the result from region server. For actual implementation, since the scan request is in background, you can just use a flag to record that you want to terminate the scan, and then you are free to do anything you want. And in the next onNext call, you just call terminate to stop sending new scan requests. Thanks.