2012-05-12 69 views
1

UODOTNET文档没有明确指出会话实例可以被多个线程使用,但它会说“正如我们所期望的,UniObjects for .NET在多线程环境中使用......”。UniVerse数据库UniSession实例 - 它可以被多个线程并发使用吗?

我只是想确认一下,这实际上意味着我可以在同一个UniSession实例上同时激活两个SELECT。

我想如果它的确如此工作,那么它意味着SELECT必须引用不同的选择列表。那是对的吗?

回答

0

UniObjects不支持对多个并行操作使用相同的会话。从本质上讲,将同一个会话用于并行操作就像在TCL一次尝试做两件事一样。当我在不同的线程上尝试了两次长时间运行选择时,我收到以下错误:

无法从传输连接读取数据:阻塞操作被WSACancelBlockingCall调用中断[IBM U2] [UODOTNET - UNIRPC] [ErrorCode = 81009] RPC失败

UniObjects 确实虽然支持使用不同会话的并行线程。因为他们是不同的会话,所以选择列表不会冲突,除非您使用保存的会话。

如果您担心授权,可以使用幻影执行这些并行操作。幻像允许基本程序异步运行。我的理解是幻影在某些情况下只会使用许可证(例如:执行HTTP请求)。您的单线程.NET应用程序可以调用两次基本过程,每次创建一个幻影以运行您的选择并将结果保存到某个任意位置。我们用下面的PICK基本代码与幻影运行任意基本纲领“PHANTOM.TEST”:

EXECUTE "PHANTOM PHANTOM.TEST ":RECORDID 

我尽量避免幻影,因为我还没有找到一种优雅的方式来确定一个幽灵已完成运行。

幻影授权参考:https://u2tc.rocketsoftware.com/documentation/PDF/1177927.pdf

+0

谢谢你,网络。我确实使用.NET的Monitor来实现代码,以等待会话的可用性。有用。而且,是的,这是许可问题。到目前为止,我一直在使用多个并发线程,但正如你所说,每个线程都有自己的会话。我没有听说过PHANTOM,但我会把我的UniVerse怪胎的同事放在上面。 – Peter

相关问题