簡體   English   中英

Windows服務不會停止

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM