我正在使用 TaskFactory 声明一个任务,我有一个严重的疑问。
我正在创建一个在创建时声明 continueWith 的任务,我没有将它分配给稍后将开始的第二个任务。
声明是这样的:
Dim taskConta = Tasks.Task(Of DataSet).Factory.StartNew(
Function() FunctionToLaunch(parameter), TokenCancel.Token, Tasks.TaskCreationOptions.LongRunning)
taskConta.ContinueWith(New Action(Sub() Throw New TimeoutException("Exception Error"), System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted)
如你看到的。此任务声明为:
TaskContinuationOptions.OnlyOnFaulted
任务被执行,然后我的下一行代码是:
taskConta.Wait()
问题是:
如果我的任务退出失败并且我使用了.Wait()
. ContinueWith Action 会在代码继续执行之前启动吗?还是会排队并稍后开始?
如果晚点开始,多长时间或少多长时间?这样做可以使 myThrow Exception
超出范围。
我知道我可以做类似的事情:
taskConta.Wait()
If taskConta.Status <> Tasks.TaskStatus.RanToCompletion Then
Throw New TimeoutException("Message")
End If
我想知道 TaskFactory continueWith 队列是如何工作的。