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

时间:2012-03-01 17:23:23

标签: c# multithreading nhibernate static deadlock

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

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

现在问题就在眼前:Abort很糟糕,静态类中的全局模具变量也是如此。线程的关键问题之一是死锁。在事务中间杀死一个线程会导致任何死锁问题吗?有关如何在静态类中进行冗长计算时优雅地杀死线程的任何建议吗?

1 个答案:

答案 0 :(得分:1)

最好将TasksCancellationTokens一起使用。 This link可能有帮助