gpt4 book ai didi

c# - 自配置类

转载 作者:行者123 更新时间:2023-11-30 17:19:12 27 4
gpt4 key购买 nike

我有一个管理流程的类。调用Stop()时或 Dispose()在这个类上,它首先会向进程发送 TCP 命令要求它关闭自己,然后在 1 秒后返回检查,如果它没有关闭,调用 CloseMainWindow() ,然后再等几秒钟,如果它仍在运行,请调用 Kill() .

现在我有一个 List<>这个类来管理一堆进程。当我想从列表中删除它们时,我会手动调用 Dispose() , 然后 Remove() .我想确保我调用 Dispose()在我失去唯一的引用之前。自从打电话Dispose()至少需要 2 秒才能返回,如果我说要移除 5 个项目,则需要一段时间。

所以我打算有另一个函数叫做 SafeDispose()哪个Invoke() Dispose()然后返回。现在从列表中删除这些并调用 SafeDispose()而不是 Dispose()将是直接的,而类本身会缓慢地自行处理。

这样做是否明智?

最佳答案

从本质上讲,您是在建议,让 Dispose 保持“原样”,而是使用一个辅助方法来异步拆除对象 - 它附加到对象。

这是明智的吗?

也许,引入线程的棘手之处在于随之而来的所有线程困惑。

  • 当另一个方法在异步处理时访问该对象时会发生什么?
  • 同时调用另一个 AsyncDispose 时会发生什么?
  • 错误是如何传播的?
  • 这会引入死锁吗?
  • 在不同线程(和不同对象)上运行大量处置会导致任何问题吗? (比如用完 tcp 套接字)

如果你能以令人满意的方式回答所有问题,那也许吧。

请记住,您还可以在 UI 中分离出一个线程来处理所有到期,并在单个线程中执行此操作(作为另一种选择)

关于c# - 自配置类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5137762/

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