gpt4 book ai didi

c# - 中止使用 Delegate.BeginInvoke 启动的线程

转载 作者:太空狗 更新时间:2023-10-30 01:11:34 24 4
gpt4 key购买 nike

免责声明:我知道Thread.Abort 是邪恶的。我将它用作最后的手段,因为某些 I/O 函数(例如,File.Exists 在不存在的网络共享上使用时)会阻塞很长时间并且不允许您指定超时。

问题:是否有可能中止(如在Thread.Abort 中)使用Delegate.BeginInvoke 启动的工作线程,或者我有自己处理线程?

最佳答案

在使用 Delegate.BeginInvoke 调用的委托(delegate)中发生的线程方法上调用 Abort 是危险的。

Delegate.BeginInvoke 在 ThreadPool 线程上启动委托(delegate)。通过 Abort 终止 ThreadPool 线程可能会导致非常奇怪的错误潜入,因为 ThreadPool 并非旨在处理此问题。

话虽如此,这也是完全没有必要的。您应该始终能够从 ThreadPool 线程中检测到您是否要中止并适本地返回。如果 ThreadPool 线程被阻塞,那也不会成为真正的问题,因为它不会阻塞您的主线程。最好在阻塞调用之后进行检查(即:在 File.Exists 之后),如果您当时想中止则返回。

关于c# - 中止使用 Delegate.BeginInvoke 启动的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2178607/

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