【问题标题】:How to fast exit from entity framework foreach query loop?如何快速退出实体框架 foreach 查询循环?
【发布时间】:2013-06-20 09:09:47
【问题描述】:

问题

我正在尝试实现这样的东西:

For Each person In db.Persons.Where(Function(x) x.Name = requestedName)
  If AbortRequested Then Exit For
  MyFunc(person)
Next

我预计 Exit For 将快速完成循环,但我错了。如果正常查询需要 60 秒,那么中止查询将需要相同的时间:60 秒。中止查询和未中止查询之间的唯一区别是“MyFunc(person)”不会为其余人员执行。

但我需要 abort 来缩短循环时间。我该怎么办?

解决方案

根据同行的建议,我实现了以下代码并且运行良好:

Dim tokenSource As New CancellationTokenSource()
Dim taskGetTests = Task.Factory.StartNew(Sub()
    For Each person In db.Persons.Where(Function(x) x.Name = requestedName)
      If AbortRequested Then
        tokenSource.Cancel()
        Exit For
      End If
      MyFunc(person)
    Next
  End Sub , tokenSource.Token)
taskGetTests.Wait(tokenSource.Token)

【问题讨论】:

    标签: vb.net performance entity-framework foreach


    【解决方案1】:

    您可以使 MyFunc 调用异步或使用任务,这将允许您在函数 MyFunc 返回值之前返回。

    MSDN on Cancel tasks

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-24
      • 2023-03-11
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 2014-05-07
      • 2022-01-06
      相关资源
      最近更新 更多