问题
我正在尝试实现这样的事情:
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)