0

我知道关于这个 arouynd 有一些线程和 atricles,但我似乎无法让它发挥作用。

基本上我有两个(或更多)任务要运行,但是有一个超时,在这个超时之后,我希望所有任务都取消,并且有办法知道我们已经超时,这样我就可以将它返回到我的网页。

这是我所拥有的:

Dim cts As System.Threading.CancellationTokenSource = New System.Threading.CancellationTokenSource

Dim oTask1 As Task(Of SearchReturn) = Task(Of SearchReturn).Factory.StartNew(
                         Function()
                             While Not cts.IsCancellationRequested
                                 cts.Token.ThrowIfCancellationRequested()
                                 Return Test1(oTest)
                             End While
                         End Function, cts.Token)

Dim oTask2 As Task(Of SearchReturn) = Task(Of SearchReturn).Factory.StartNew(
                         Function()
                             While Not cts.IsCancellationRequested
                                 cts.Token.ThrowIfCancellationRequested()
                                 Return Test2(oTest)
                             End While
                         End Function, cts.Token)

If Not Task.WaitAll({oTask1, oTask2}, 4000, cts.Token) Then cts.Cancel()

cts.Cancel() 确实被调用了,因此它知道它花费了太长时间,但实际上并没有取消它,它只是继续执行直到任务完成。

我敢肯定这可能是我做错了一些简单的事情,但我无法发现它。

提前致谢。安迪

4

0 回答 0