我正在 VB.NET 4.5 中尝试 Async / Await 并且如果我的任务在一定时间内没有完成,我希望它超时。我有
Await Task.Run( Sub() PerformSomeAction() )
这看起来很整洁。我还看到有一种带有取消令牌的 Task.Run 形式。如果超时,我如何使用它来取消任务?
编辑
我有以下原型解决方案
Dim cts = New CancellationTokenSource()
Dim ct As CancellationToken = cts.Token
Dim delay = Task.Delay(1000)
Dim completed = Await Task.WhenAny(Task.Run(Sub() PerfomSomeAction(ct), ct), delay)
If completed Is delay Then
cts.Cancel()
End If
这看起来很嘈杂的代码。这个好吗?另一个想法是将超时作为异常处理并使用 cts.CancelAfter。像这样的东西??
Dim cts = New CancellationTokenSource()
Dim ct As CancellationToken = cts.Token
try
cts.CancelAfter(1000) 'ms
Dim completed = Task.Run(Sub() PerformSomeAction(ct), ct)
catch SomeTimeoutException
end try
如果我得到检测到取消令牌,则使用 PerformSomeAction 我会抛出 SomeTimeoutException 。