如何快速退出实体框架foreach查询循环?

时间:2013-06-20 09:09:47

标签: vb.net performance entity-framework foreach

问题

我正在尝试实现这样的事情:

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)”不会为其他人执行。

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

解决方案

根据同行的建议,我实施了以下代码,并且工作正常:

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)

1 个答案:

答案 0 :(得分:1)

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

MSDN on Cancel tasks