我有一个需要某些函数的接口,该函数返回Task。在实现此接口的类之一中,我不需要在此函数中做任何事情。但是,这可以理解地向我提出了一个有用的警告:函数'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
答案 0 :(得分:2)
您可以Return Task.CompletedTask
。这在某些情况下很有用,例如您描述需要满足一种返回Task的接口方法的情况,但是您无需等待具体的实现。
Public Function MoveToNextField() As Task Implements FormObjects.Interfaces.IViewer.MoveToNextField
Return Task.CompletedTask
End Function