任务可靠性(或者我应该做其他事情吗?)

我有一个使用 Nancy 和 Nancy.Hosting.Self 的 C# 控制台应用程序。


这个想法是它将通过 Nancy 为 API 提供服务,并且主应用程序将定期轮询与各种应用程序的多个连接+当通过 API(通过 Nancy)请求时从这些连接获取数据。


所以我将有 2 个正在运行的进程,常量轮询和 HTTP 服务器。


我的 Program.cs 包含以下片段。


Task pollTask = null;

try {

  pollTask = Task.Run(async () => {

    while (processTask) {

      connectionPool.PollEvents();


      await Task.Delay(configLoader.config.connectionPollDelay, wtoken.Token);

    }

    keepRunning = false;

  }, wtoken.Token);

}

catch (AggregateException ex) {

  Console.WriteLine(ex);

}

catch (System.Threading.Tasks.TaskCanceledException ex) {

  Console.WriteLine("Task Cancelled");

  Console.WriteLine(ex);

}

然后...


using (var host = new Nancy.Hosting.Self.NancyHost(hostConfigs, new Uri(serveUrl))) {

  host.Start();

  // ...

  // routinely checking console for a keypress to quit which then sets

  // processTask to false, which would stop the polling task, which

  // in turn sets keepRunning to false which stops the application entirely.

}

轮询任务似乎只是死亡/停止,没有任何输出到控制台来表明它停止的原因。在检查控制台输入按键时,我还查询了 pollTask.Status,它最终详细说明了“Faulted”。但我不知道为什么。我也在质疑长期/永远运行的任务的可靠性。


为避免这种情况含糊不清,我有一个主要问题。Task 是否适合以上述方式永久运行的任务。如果不是,我应该使用什么来实现 2 个并行进程,其中一个是 Nancy。


收到一只叮咚
浏览 169回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP