具有超时取消请求的VB.Net Task.WaitAll

时间:2015-05-26 09:49:52

标签: vb.net multithreading task cancellationtokensource cancellation-token

我知道有一些关于这个问题的线索和关键词,但我似乎无法让它发挥作用。

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

以下是我所拥有的:

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()确实被调用,所以它知道它花了太长时间但它实际上并没有取消它,它只会继续执行任务。

我确定这可能是一件简单的事我做错了但是我不能发现它。

提前致谢。 安迪

0 个答案:

没有答案