【问题标题】:Overload resolution failed for New PageAsyncTask新 PageAsyncTask 的重载解析失败
【发布时间】:2014-12-20 06:23:24
【问题描述】:

我正在尝试在 ASP.NET 4.5 Web 窗体中执行一些异步操作。我在学习几个在线教程时收到此错误:

重载解析失败,因为无法调用可访问的“新建” 用这些论点:

'Public Sub New(handler As System.Func(Of System.Threading.CancellationToken, System.Threading.Tasks.Task))': 'System.Threading.Tasks.Task' 类型的值无法转换为 'System.Func(的 System.Threading.CancellationToken, System.Threading.Tasks.Task)'。

'Public Sub New(handler As System.Func(Of System.Threading.Tasks.Task))': 类型值 'System.Threading.Tasks.Task' 无法转换为 'System.Func(Of System.Threading.Tasks.Task)'。

这里是代码(类似于this tutorial):

Imports System.Threading.Tasks

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     RegisterAsyncTask(New PageAsyncTask(DoStuffAsync))
     ' etc...
End Sub

Private Async Function DoStuffAsync() As Task
    Await SomeTask()
End Function

这是解决方案中唯一的错误。据我所知,这正是教程中的内容(从 C# 翻译)。我确实在 MSDN 文档中注意到 PageAsyncTask 为事件处理程序使用了几个额外的参数(这需要额外的代码),但我在网上阅读的所有教程都避开了这些,只输入了函数名称 (Func(Of Task))。我错过了什么?

This 是个人仅使用方法名称(并传递方法参数)的示例。

【问题讨论】:

  • 尝试使用RegisterAsyncTask(New PageAsyncTask(AddressOf DoStuffAsync))
  • 谢谢@Mark。这行得通。如果您将其作为答案,我可以接受。我猜在 C# 中转换是隐式的(?)在这些情况下,C# 不需要 AddressOf 的等价物。一旦我知道在哪里查看,查看代表的文档提供了一些额外的信息。

标签: asp.net vb.net asynchronous webforms .net-4.5


【解决方案1】:

在 C# 中,您可以只使用方法名称将函数委托作为参数传递。在 VB.NET 中,您需要使用 AddressOf 运算符来传递委托。例如

RegisterAsyncTask(New PageAsyncTask(AddressOf DoStuffAsync))

【讨论】:

    猜你喜欢
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多