实施 Cancel 回调
UDx 可以实施 cancel()
回调函数。如果调用 UDx 的查询已被取消,Vertica 将调用此函数。
通常可以实施此函数以对 UDx 已生成的任何附加处理执行有序关闭。例如,您可以让 cancel()
函数关闭 UDx 已生成的线程,或者也可以让该函数向第三方库指示它需要停止处理并退出。cancel()
函数应使 UDx 的函数类准备好进行销毁,因为 Vertica 会在 cancel()
函数已退出之后调用 UDx 的 destroy()
函数。
UDx 的默认 cancel()
行为是什么都不做。
cancel()
的合约为:
-
对于每个 UDx 实例,Vertica 最多会调用一次
cancel()
。 -
Vertica 可以与 UDx 对象的任何其他方法(构造函数和析构函数除外)同时调用
cancel()
。 -
Vertica 可以从另一个线程调用
cancel()
,因此实施应当是线程安全的。 -
Vertica 将调用
cancel()
来处理明确的用户取消或查询错误。 -
Vertica 不保证
cancel()
将运行完成。长期取消可能会被中止。
对 cancel()
的调用不会以任何方式与 UDx 的其他函数同步。如果要求处理函数在 cancel()
函数执行某项操作(例如终止线程)之前退出,您必须让这两个函数同步其操作。
如果调用 setup()
,则 Vertica 始终调用 destroy()
。取消并不能防止破坏。
有关实施 cancel()
的示例,请参阅 C++ 示例:可取消的 UDSource。