UODOTNET 文档没有明确说明一个会话实例可以被多个线程使用,但它说“正如我们期望 UniObjects for .NET 可以在多线程环境中使用,......”。
我只想确认这实际上确实意味着我可以在同一个 UniSession 实例上同时激活两个 SELECT。
我想如果它确实像这样工作,那么这意味着 SELECT 将不得不引用不同的选择列表。那是对的吗?
UODOTNET 文档没有明确说明一个会话实例可以被多个线程使用,但它说“正如我们期望 UniObjects for .NET 可以在多线程环境中使用,......”。
我只想确认这实际上确实意味着我可以在同一个 UniSession 实例上同时激活两个 SELECT。
我想如果它确实像这样工作,那么这意味着 SELECT 将不得不引用不同的选择列表。那是对的吗?
UniObjects 不支持将同一会话用于多个并行操作。本质上,使用同一个会话进行并行操作就像在 TCL 尝试同时做两件事。当我在不同的线程上尝试两个长时间运行的选择时,我收到以下错误:
无法从传输连接读取数据:阻塞操作被 WSACancelBlockingCall 调用中断。[IBM U2][UODOTNET - UNIRPC][ErrorCode=81009] RPC 失败
UniObjects确实支持使用不同会话的并行线程。因为它们是不同的会话,除非您使用已保存的,否则选择列表不会发生冲突。
如果您担心许可问题,您可以利用幻像来执行这些并行操作。Phantom 允许异步运行基本程序。据我了解,幻影仅在某些情况下使用许可证(例如:执行 HTTP 请求)。您的单线程 .NET 应用程序可以调用一个基本进程两次,每次都会创建一个幻像来运行您的选择并将结果保存到某个任意位置。我们使用以下 PICK 基本代码来运行带有幻像的任意基本程序“PHANTOM.TEST”:
EXECUTE "PHANTOM PHANTOM.TEST ":RECORDID
我尽量避免幻像,因为我还没有找到一种优雅的方法来确定幻像已经完成运行。
幻影许可参考:https ://u2tc.rocketsoftware.com/documentation/PDF/1177927.pdf