gpt4 book ai didi

c# - 如何停止 LongRunning 任务等待 Monitor.Wait 应用程序关闭时?

转载 作者:太空宇宙 更新时间:2023-11-03 21:36:40 27 4
gpt4 key购买 nike

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

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

最佳答案

您通过滥用 Dispose() 陷入困境。客户端代码在关闭时不太可能使用它,无论如何,当终结器稍后运行一毫秒时,尽早处理非托管资源毫无意义。

但这不是问题。一个长时间运行的任务使用了一个线程,该线程的 IsBackground property设置为真。这样可以节省您的培根,CLR 将在关闭时自动终止线程。在任何情况下,阻塞的 Task 都不会阻止程序正常结束。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com