从另一个线程检查异步任务的完成情况

本文关键字:情况 任务 异步 另一个 线程 检查 | 更新日期: 2023-09-27 17:50:30

我使用异步任务来上传文件和更新数据库。我需要知道应用程序何时关闭以更新数据库中的上传状态。

我的任务是在一个ViewModel类。

private async void OnUpload(object param)
{
    await Task.Factory.StartNew(() =>
    {
        try
        {
            ...
        }
        catch (Exception ex)
        {
            ...
        }
    }
}

我应该把什么放在我的主窗口关闭事件?

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    ....
    base.OnClosing(e);
}

从另一个线程检查异步任务的完成情况

在您的类中使用bool变量IsTaskCompleted,并保持默认值为false。作为任务try块的最后一条语句,将IsTaskCompleted设置为true

在关闭事件处理程序中检查此变量,如果值为false,则表示任务未完成。

就我个人而言,我会使用响应式扩展(RX)和Subject发布来自OnClosing的事件。

在程序中任何需要它的地方,我都会订阅事件并执行任何清理。

这将把OnClosing事件与所有执行清理的订阅者分离开来,并允许您将数据库的清理代码和数据库的繁重提升代码放在彼此靠近的位置。