【发布时间】: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