0

问题

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

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)
4

1 回答 1

1

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

MSDN 关于取消任务

于 2013-06-20T09:18:33.137 回答