New PageAsyncTask的重载分辨率失败

时间:2014-12-19 21:00:51

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

我正在尝试在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(Of 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使用了几个额外的参数用于事件处理程序(需要额外的代码),但我在线阅读的所有教程都避开了这些,只放了函数名{({ 1}})。我错过了什么?

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

1 个答案:

答案 0 :(得分:2)

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

RegisterAsyncTask(New PageAsyncTask(AddressOf DoStuffAsync))