首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF 5:如何取消异步任务中的长查询

EF 5:如何取消异步任务中的长查询
EN

Stack Overflow用户
提问于 2013-08-05 13:24:43
回答 2查看 1.9K关注 0票数 6

在我的应用程序中,我有多个选项卡,用实体框架5显示数据库中的数据。

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

代码语言:javascript
复制
public async void LoadData()
{
    [...]

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

    [...]
}

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-05 13:37:24

在EF5中,没有办法取消查询,因为它不接受CancellationToken。您可以在这里阅读更多关于这一点的信息:实体框架取消长期运行的查询

然而,EF6确实支持它。

它有所有方法的异步版本。因此,对于长期运行的查询,ToList()可以是ToListAsync(),而且它确实支持CancellationToken

票数 9
EN

Stack Overflow用户

发布于 2013-08-05 14:07:49

代码语言:javascript
复制
// ***Declare a System.Threading.CancellationTokenSource.
CancellationTokenSource cts;
public async void LoadData()
{
   // ***Instantiate the CancellationTokenSource.
    cts = new CancellationTokenSource();
    await Task.Run(
        () =>
            {
                Measurements = DataContext.Measurements
                                  .Where(m => m.MeasureDate = DateTime.Today)
                                  .ToList();
            }, cts);

}

    //I dont know what front end you using but in WPF for example on the tab event
    <TabControl SelectionChanged="OnSelectionChanged" ... />

private void OnSelectionChanged(Object sender, SelectionChangedEventArgs args)
{
    TabItem item = sender as TabItem; //The sender is a type of TabItem...

    if (item != null)
    {
         if (cts != null)
         {
            //This cancels the current long Running task.
            cts.Cancel();

            //call for next tab with filter LoadData(filter);
         }
    }
}

我个人的看法是。如果可以的话,最好的方法就是预先加载标签的所有数据。然后渲染视图。因此,当您在选项卡之间单击时,数据已经加载。加上调用数据库的成本只影响您一次。而不是每次单击选项卡时都往返于数据库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18059275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档