EF 5:如何在异步任务中取消长运行查询

Sta*_*eff 4 .net c# wpf entity-framework

在我的应用程序中,我有多个选项卡,使用Entity Framework 5显示数据库中的数据.

当我在选项卡之间切换时,我开始通过任务自动加载数据,因为我不希望GUI变得无响应(此任务大约需要5-10秒):

public async void LoadData()
{
    [...]

    await Task.Run(
        () =>
            {
                Measurements = DataContext.Measurements
                                  .Where(m => m.MeasureDate = DateTime.Today)
                                  .ToList();
            });

    [...]
}
Run Code Online (Sandbox Code Playgroud)

但是当任务运行时,用户仍然可以更改为另一个选项卡,如果他这样做,我想取消EF查询和/或任务.

实现这一目标的最佳方法是什么?

TCM*_*TCM 7

在EF5中,由于它不接受,因此无法取消查询CancellationToken.你可以在这里阅读更多相关内容:实体框架取消长时间运行的查询

但是,EF6确实支持它.

它具有所有方法的异步版本.因此ToList()可以ToListAsync()用于长时间运行的查询,它确实支持CancellationToken.