我刚刚使用标准 Visual Studio 模板创建了一个 Worker Service。在 Worker 类中,如果我删除while (!stoppingToken.IsCancellationRequested){...}
包装器并运行应用程序,ExecuteAsync 永远不会完成。如果我添加return
到方法的末尾,它又不会完成。
谁能解释是什么让这种方法保持活力?
我想知道为什么在下面的代码中ExecuteAsync
不只是完成并拆除我的FileSystemWatcher
? 我可以一直触发观察者,直到按下 Ctrl+C 取消令牌并停止整个应用程序。
protected override async Task ExecuteAsync(CancellationToken stoppingToken) =>
await Task.Run(async () =>
{
try
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
_watcher = new FileSystemWatcher(_settings.Value.FolderToWatch, "Transactions_????????.xml")
{
NotifyFilter = NotifyFilters.FileName
};
_watcher.Created += FileCreated;
_watcher.EnableRaisingEvents = true;
_logger.LogInformation("Monitoring folder '{watchedFolder}' for file drops...", _settings.Value.FolderToWatch);
}
catch (Exception e) when (False(() => _logger.LogCritical(e,"Fatal error.")))
{
throw;
}
});