生成执行长计算并使用NHibernate事务的线程

本文关键字:NHibernate 事务 线程 执行长 计算 | 更新日期: 2023-09-27 18:26:24

我创建了一个ThreadQueue,以便更有效地加载WPF页面,而不会因为加载期间进行了大量计算而冻结主程序。线程通常访问NHibernate(我对它知之甚少,因为我工作的公司为它创建了一个包装器dll。)

我已经设置了代码,如果用户确定他们不再需要查看页面,就中止线程。我知道这样做是错误的,但目前似乎是最有效的做法。在我编写的其他线程程序中,我将使用全局变量并在循环中设置这些变量,以允许线程快速而优雅地消亡。该程序使用许多静态类来完成大部分计算(大而长的计算;许多计算可能需要5分钟才能运行)。话虽如此,将全局die布尔值放在静态类中可能会杀死许多运行这些计算的线程。

现在来谈谈眼前的问题:Abort是坏的,静态类中的全局die变量也是坏的。线程的一个关键问题是死锁。在事务处理过程中杀死线程会导致死锁问题吗?关于如何在静态类中进行长时间计算时优雅地终止线程,有什么建议吗?

生成执行长计算并使用NHibernate事务的线程

最好将TasksCancellationTokens一起使用。此链接可能有助于