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