我正在尝试在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是一个人只使用方法名称(并传递方法参数)的例子。
答案 0 :(得分:2)
在C#中,您可以使用方法名称将函数委托作为参数传递。在VB.NET中,您需要使用AddressOf
运算符来传递委托。 e.g。
RegisterAsyncTask(New PageAsyncTask(AddressOf DoStuffAsync))