Why is this an issue?

Returning Nothing from a non-Async Task/Task(Of TResult) procedure will cause a NullReferenceException at runtime if the procedure is awaited. This problem can be avoided by returning Task.CompletedTask or Task.FromResult(Of TResult)(Nothing) respectively.

Public Function DoFooAsync() As Task
    Return Nothing            ' Noncompliant: Causes a NullReferenceException if awaited.
End Function

Public Async Function Main() As Task
    Await DoFooAsync()        ' NullReferenceException
End Function

How to fix it

Instead of Nothing Task.CompletedTask or Task.FromResult(Of TResult)(Nothing) should be returned.

Code examples

A Task returning procedure can be fixed like so:

Noncompliant code example

Public Function DoFooAsync() As Task
    Return Nothing            ' Noncompliant: Causes a NullReferenceException if awaited.
End Function

Compliant solution

Public Function DoFooAsync() As Task
    Return Task.CompletedTask ' Compliant: Method can be awaited.
End Function

A Task(Of TResult) returning procedure can be fixed like so:

Noncompliant code example

Public Function GetFooAsync() As Task(Of Object)
    Return Nothing                             ' Noncompliant: Causes a NullReferenceException if awaited.
End Function

Compliant solution

Public Function GetFooAsync() As Task(Of Object)
    Return Task.FromResult(Of Object)(Nothing) ' Compliant: Method can be awaited.
End Function

Resources

Documentation

Articles & blog posts