VB.Net Task结果自动转换为Task(of Task)

时间:2019-06-14 13:19:10

标签: vb.net async-await

我正在尝试将一个sub转换为异步文件,并且根据每份文档(据我所记得,我以前做过)表明,我应该将sub转换为{{1 }}。

我的问题是,一旦我按下Enter键,它就会被修改为Function() as Task。为了确保它不在我的方法之内,我做了一个空的方法,但结果却相同。我还尝试执行ctrl + z来强制保留Function() as Task(of Task),但随后在方法上得到了

  

BC36945 Visual Basic和VB.NET'Async'修饰符只能在Subs或返回Task或Task#Of T#的函数上使用。

并在呼叫者上

  

BC36930 Visual Basic和VB.NET“等待”要求类型“任务”具有合适的GetAwaiter方法。

正常吗?这是4.6.1中的新行为吗?还是我需要做些其他的事情才能使其按预期工作并返回void?

注意:我使用的是安装了TupleValue nuget的Framework 4.6.1。

1 个答案:

答案 0 :(得分:0)

如@HansPassant所述,要在没有其完整名称空间(System.Threading.Tasks.Task)的情况下直接使用Task,必须存在正确的导入(默认情况下通常是这种情况),并且其他任何名称空间都不应与它冲突

在我的特定情况下,我导入了Microsoft.Exchange.WebServices.Data,其中也包含一个Task类型,因此当VS修改我的签名以与as Task(of Task)异步时,实际上是as System.Threading.Tasks.Task(Of Microsoft.Exchange.WebServices.Data.Task)

在我的项目中,我通过添加Imports Tsk = System.Threading.Tasks来解决歧义,然后能够简单地编写as Tsk.Task