【发布时间】:2019-01-18 10:34:53
【问题描述】:
我有一个接口需要某个返回任务的函数。在实现这个接口的一个类中,我不需要在这个函数中做任何事情。但是,这可以理解地向我提供了一个有用的警告:函数“MoveToNextField”不会在所有代码路径上返回值。使用结果时,运行时可能会发生空引用异常。
Public Function MoveToNextField() As Task Implements FormObjects.Interfaces.IViewer.MoveToNextField
End Function
这会带来一个问题,因为调用它的代码(如下)将等待此函数。如果我没有返回任何东西,我会得到一个空引用异常。
await objExample.MoveToNextField()
但是,由于我没有什么可等待的,将函数更改为以下也会给我一个警告:此异步函数缺少“等待”运算符,因此将同步运行。考虑使用“Await”运算符来等待非阻塞 API 调用,或使用“Await Task.Run(...)”在后台线程上执行 CPU 密集型工作。
Public Async Function MoveToNextField() As Task Implements FormObjects.Interfaces.IViewer.MoveToNextField
End Function
所以,我的问题是:解决这个问题的最正确方法是什么?下面的代码可以正常工作并且不会产生任何错误,但我不相信这是最好的方法:
Public Function MoveToNextField() As Task Implements FormObjects.Interfaces.IViewer.MoveToNextField
Return Task.Run(Sub()
End Sub)
End Function
【问题讨论】:
-
如果你必须有一个方法体怎么办
Return Task.CompletedTask
标签: .net vb.net async-await task