6

Windows サービスがあり、OnStart() イベント内でタスクを実行するコードを作成しました。

 protected override void OnStart(string[] args)
        {
            this.DoTask();
        }

private void DoTask()
        {
            Task task1 = Task.Factory.StartNew(() => this.OriginalFileProcessor.StartPolling());

            try
            {
                Task.Wait(task1);
            }
            catch (Exception ex)
            {
                this.Log.Error("Failed running the task", ex);
            }           
        }

DoTask は終わりのないループです。サービス停止時のみ停止します。

しかし、サービスを開始しようとすると、長時間待機してから次のエラーが表示されます。

Windows could not start the ... service on Local Computer.
Error 1053: The service did not respond to the start or control request in a timely fashion.

それを解決する方法は?

4

3 に答える 3

2

これは、 が終了するのを待っているためだと思いますが、OriginalFileProcessor.StartPolling()これは決して起こりません。タスク インスタンスを別のメンバーに移動し、完了するのを待たないでください。

private Task m_task = null;

private void DoTask()
{
    try
    {
        m_task = Task.Factory.StartNew(() => this.StartPolling());
    }
    catch
    {
        this.Log.Error("Unable to start task", ex);
        throw;  // Rethrow, so that the OS knows, there was something wrong.
    }           
}

private void StartPolling()
{
    try
    {
        this.OriginalFileProcessor.StartPolling();
    }
    catch (Exception ex)
    {
        this.Log.Error("Failed running the task", ex);
    }
}
于 2013-04-12T14:17:58.220 に答える