我有一个使用 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。
相关分类