C# 在未处理的任务(TPL)异常上终止Windows服务

C# 在未处理的任务(TPL)异常上终止Windows服务,c#,windows-services,task-parallel-library,task,C#,Windows Services,Task Parallel Library,Task,我的Windows服务生成各种任务。我用一个延续连接每个任务,以便仅在出现未处理的异常时执行:TaskContinuationOptions.OnlyOnFaulted 如何正确终止此延续中的服务?由于出现意外错误,我不想让服务继续运行。我还希望以允许我使用Windows服务恢复选项的方式退出该服务—可能会重新启动该服务 我当前正在呼叫环境。FailFast。这是最好的解决方案吗?为什么不优雅地调用OnStop?如果我这样做,服务是否可以自动重新启动?我还认为OnStop会让应用程序运行一小段时

我的Windows服务生成各种任务。我用一个延续连接每个任务,以便仅在出现未处理的异常时执行:
TaskContinuationOptions.OnlyOnFaulted

如何正确终止此延续中的服务?由于出现意外错误,我不想让服务继续运行。我还希望以允许我使用Windows服务恢复选项的方式退出该服务—可能会重新启动该服务


我当前正在呼叫
环境。FailFast
。这是最好的解决方案吗?

为什么不优雅地调用
OnStop
?如果我这样做,服务是否可以自动重新启动?我还认为OnStop会让应用程序运行一小段时间,同时优雅地终止剩余的线程/任务。立即退出可能更安全吗?当任务抛出异常而未发现异常时的默认行为是流程被拆除。如果您编写的代码更少,那么除了系统已经为您提供的功能之外,您还想添加什么?@Damien_不相信这一点。对于.Net 4.5及更高版本,或者当您使用.Net 4.0以
OnlyOnFaulted
连续方式处理任务时,情况并非如此。我认为默认的行为是,只有当GC调用任务的finalizer时,进程才会被拆毁——这是不确定的?编辑:在未“观察到”故障的情况下进行此操作。