public abstract Task End(object obj, SynchronousOptions opts = null);
public bool WillBegin(object obj, SynchronousOptions opts = null) => false;
public abstract bool WillEnd(object obj, SynchronousOptions opts = null);