gpt4 book ai didi

c# - 协调工作线程关闭

转载 作者:行者123 更新时间:2023-11-30 13:49:55 25 4
gpt4 key购买 nike

我有一个 List(Of IWorker),其中包含许多具体内容。 IWorker 依次有一个 Startup()Shutdown() 方法。

在 Worker 类中,Startup() 创建一个新的工作线程,然后返回。 Shutdown() 目前设置一个私有(private)的 ShutDownRequested 标志并返回。该标志由工作线程检查(最坏情况下每隔几秒检查一次)。

一切正常,但目前父应用无法确定 Worker 是否已完成关闭。

我可以看到很多解决方法,但不确定最好的方法是什么。

  • State 属性添加到 IWorker。应该可行,但我将要轮询状态,这似乎有点令人讨厌。
  • 阻止关闭命令 - 可能是我理想的解决方案,但我不确定如何实现它 - worker Sunclock 是一个私有(private)对象吗 Shutdown() 设置标志后还应该尝试同步时钟吗?
  • 还有别的吗?

感谢任何文章、意见或建议。 C# 或 VB 中的示例都可以。

最佳答案

如果您希望关闭是一个阻塞操作,我不会尝试使用锁定来阻塞 Shutdown()

如果您可以使用 .NET 4,我会将您的内部执行方法设为任务。然后您可以调用 Task.Wait() 来阻塞直到它完成。

如果您必须使用 .NET 3.5 或更早版本,我会让 Shutdown() 调用在内部等待 WaitHandle,例如 ManualResetEvent。关闭代码可能如下所示:

' Include:
Private shutdownEvent as ManualResetEvent = new ManualResetEvent(false)

Sub Shutdown()
ShutDownRequested = True
shutdownEvent.WaitOne()
End Sub

然后轮询循环(线程操作)将执行:

Sub Execute()
While Not ShutDownRequested
' Do your work
End While

' Before you exit, "set" the event:
shutdownEvent.Set()
End Sub

关于c# - 协调工作线程关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7968962/

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