package r.p.exec.internal;
import ratpack.sep.Action;
import ratpack.sep.ActionResult;
import ratpack.exec.ExecControl;
import ratpack.exec.Promise;
/**
* Example of long running blocking IO.
* <p>
* Because it is blocking so instead of {@code execControl.promise()}, {@code execControl.blocking()} method is used.
* Blocking operation will be performed on a thread from a special thread pool and not on threads from main
* compute event loop.
*/
public class LongBlockingIOAction implements Action<String,String> {
private final String name;
private final String data;
public LongBlockingIOAction(String name, String data) {
this.name = name;
this.data = data;
}
@Override
public String getName() { return name; }
@Override
public String getData() { return data; }
@Override
public Promise<ActionResult<String>> exec(ExecControl execControl) throws Exception {
return execControl.blocking(() -> {
Thread.sleep(3000);
return ActionResult.success(data);
});
}
}