我有一个 WPF 应用程序,我希望它可以在启动时分拆两个数据研究后台任务。这些后台任务将打开、解析和关闭文件,然后更新 SqlServer 数据库中的数据。这些任务都不需要向显示线程返回任何内容。这些后台任务不必运行完成,但我需要避免使文件保持打开状态或 Sql Server 处于意外状态。用户可以在任务开始后随时关闭应用程序。我正在使用 System.Threading.Tasks 命名空间中的资源。举个例子:
var IncorporateTask = Task.Factory.StartNew(CommentIncorporateTask);
var incorporateTaskDone = IncorporateTask.ContinueWith((antecedent) => IncorporateTaskFinalize(), TaskScheduler.FromCurrentSynchronizationContext());
我是否需要采取任何措施来确保这些线程被彻底关闭,并且不会延迟用户关闭应用程序的体验?
最佳答案
您无需担心线程会被干净地终止。您确实需要担心定义后台工作的事务边界,并确保进程不会在这些边界内终止。
我建议您将 CancellationToken 传递给后台任务。当用户请求退出进程时,您应该:
然后,后台任务有责任在相关时检查取消 token ,并在 token 被取消时提前终止,并且这样做不会让您处于不良状态。这实质上是让后台任务负责何时发生终止,但允许 UI 尽可能早地请求终止。
关于.net - 如何在后台任务运行的情况下优雅地关闭WPF应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13994640/