[英]Windows service won't stop
我做了這個小程序,有一個我無法解決的有趣行為。 這個想法是為了使它像調度程序一樣,它將在特定時間過后執行命令。 一切都按預期工作,但當我關閉服務時,我意識到了一些事情。 1.服務需要很長時間才能關閉。 有時超過30分鍾,我也不得不殺死PID。 2.服務運行的時間越長,關閉所需的時間越長。 我認為它與命令執行的次數有關。 3.我認為每次迭代之間的間隔越短,關閉服務就越容易。
這是我正在使用的代碼。
public void Start()
{
_cancellationToken = new CancellationTokenSource();
var token = _cancellationToken.Token;
_pollingTask = Task.Factory.StartNew(
() =>
{
while (true)
{
try
{
Log.Debug("Call Import PDF");
ConnectUncPaths();
ImportPdf();
Thread.Sleep(Intervall * 60000);
if (token.IsCancellationRequested)
break;
}
catch (Exception)
{
DissconnectUncPaths();
}
}
}, token, TaskCreationOptions.LongRunning, TaskScheduler.Current);
}
public void Stop()
{
_cancellationToken.Cancel();
_pollingTask.Wait();
}
這是一個截圖
它不會停止,因為Thread.Sleep在延遲結束之前不會結束。 相反,嘗試這樣的事情:
public void Start()
{
_cancellationToken = new CancellationTokenSource();
var token = _cancellationToken.Token;
_pollingTask = Task.Factory.StartNew(
() =>
{
while (!token.IsCancellationRequested)
{
try
{
Log.Debug("Call Import PDF");
ConnectUncPaths();
ImportPdf();
Task.Delay(TimeSpan.FromMinutes(Intervall), token)
}
catch (Exception)
{
DissconnectUncPaths();
break;
}
}
}, token, TaskCreationOptions.LongRunning, TaskScheduler.Current);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.