【问题标题】:Why does continueWith uses action(of task) as a parameter?为什么 continueWith 使用 action(of task) 作为参数?
【发布时间】:2019-05-15 03:30:39
【问题描述】:

基本上,它要求一个以 Task 作为参数的 sub。这就是 Action(of Task) 对吧?

为什么?

我知道我可以通过普通的 sub 来 continueWith。我从来不记得传递了一个需要任务参数的 sub。

【问题讨论】:

  • 您在Task 上调用ContinueWith,然后Action 继续接收相同的Task。这个想法是,它很可能需要知道上一步中发生了什么,以便确定要做什么。

标签: vb.net continuewith


【解决方案1】:

根据定义。在大多数情况下,“ContinueWith”应该使用“先行”任务的结果进行操作。如果您忘记如何调用“ContinueWith”,Visual Studio 的“Peek Definition”将为您提供帮助。因此,右键单击“ContinueWith”并选择“Peek Definition”,您将检查签名。基本上,它看起来就像在下面的sn-p中显示的那样。

 public Task<TNewResult> ContinueWith<TNewResult>(
      Func<Task<TResult>, TNewResult> continuationFunction)
    {
      StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
      return this.ContinueWith<TNewResult>(continuationFunction, TaskScheduler.Current, new CancellationToken(), TaskContinuationOptions.None, ref stackMark);
    }

如果太复杂,你可以使用sn -p 并保存一个示例,然后在需要时插入。

那么,让我们创建一个示例。

Module Module1

    Sub Main()
        Dim taskA As Task(Of DayOfWeek) = Task.Run(Function() DateTime.Today.DayOfWeek )

        ' Execute the continuation when the antecedent finishes.
        Dim taskB As Task(Of string) = taskA.ContinueWith(Function (antecedent)
            Return $"Today is {antecedent.Result}"
        End Function)


        taskb.Wait()
        Console.WriteLine(taskB.Result)



        Console.ReadLine()
    End Sub

End Module

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多