gpt4 book ai didi

c# - 如何安全地停止在 Windows 服务中运行的 C# .NET 线程?

转载 作者:可可西里 更新时间:2023-11-01 08:03:59 24 4
gpt4 key购买 nike

我正在维护一些看起来像这样的代码。这是一项 Windows 服务,每 30 分钟执行一些工作。 ActualWorkDoneHere 方法需要大约 30 秒才能运行,但如果它在运行时停止,可能会使事情处于糟糕的状态。防止这种情况发生的最佳方法是什么?我应该用 onstop 方法中设置为 false 的 bool 值替换 While(true) (删除线程 Abort 调用)吗?有什么方法可以判断线程是否正在休眠?

namespace WorkService
{
public partial class WorkService : ServiceBase
{
private Thread _workerThread = null;

public WorkService()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
_workerThread = new Thread(new ThreadStart(DoWork));
_workerThread.Start();
}

protected override void OnStop()
{
_workerThread.Abort();
}

static void DoWork()
{
int sleepMinutes = 30;

while (true)
{
ActualWorkDoneHere();

System.Threading.Thread.Sleep(new TimeSpan(0, sleepMinutes, 0));
}
}
}
}

最佳答案

当我遇到这样的事情时,我通常会使用 ManualResetEvent。这是在 Stop() 调用中设置的。然后我等待超时:

for (;;)
{
if (_stop.WaitOne(timeout))
break;
DoSomething();
}

关于c# - 如何安全地停止在 Windows 服务中运行的 C# .NET 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1764898/

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