我有一个长时间运行的Task,它在Monitor.Wait上内部阻塞,没有超时。我的班级有一个Dispose方法,该方法可以使其解除阻塞,然后等待该任务完成。但是,在某些用法中,我的客户根本不会调用Dispose,这将导致Task永远处于阻塞状态。
这会是个问题吗?
当客户端应用程序关闭时,我该如何发出信号?
我正在考虑使用Finalize方法,但似乎容易出错。

编辑:
我在短短几页中找到了一篇很好的文章,解释了很多这样的事情:
http://www.albahari.info/threading/threading.pdf

最佳答案

您通过滥用Dispose()进入了这个泡菜。客户端代码在关闭时不太可能使用它,无论如何,在终结器运行一毫秒后,尽早配置非托管资源是没有意义的。

但这不是问题。长时间运行的Task使用其IsBackground property设置为true的线程。这样可以节省您的培根,CLR将在关闭时自动终止线程。在这种情况下,被阻止的Task不会阻止程序正常结束。

关于c# - 如何停止正在运行的Monitor上的LongRunning任务正在等待应用程序关闭?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21409550/

10-17 00:58