74 lines
1.5 KiB
Plaintext

include::../../../shared_content/dotnet/csharp_dictionary.adoc[]
== Why is this an issue?
include::../why-dotnet.adoc[]
[source,csharp]
----
public Task DoFooAsync()
{
return null; // Noncompliant: Causes a NullReferenceException if awaited.
}
public async Task Main()
{
await DoFooAsync(); // NullReferenceException
}
----
== How to fix it
include::../how-to-fix-it-dotnet.adoc[]
=== Code examples
A `Task` returning {concept_method} can be fixed like so:
==== Noncompliant code example
[source,csharp,diff-id=1,diff-type=noncompliant]
----
public Task DoFooAsync()
{
return null; // Noncompliant: Causes a NullReferenceException if awaited.
}
----
==== Compliant solution
[source,csharp,diff-id=1,diff-type=compliant]
----
public Task DoFooAsync()
{
return Task.CompletedTask; // Compliant: Method can be awaited.
}
----
A `Task{typeparameter_TResult}` returning {concept_method} can be fixed like so:
==== Noncompliant code example
[source,csharp,diff-id=2,diff-type=noncompliant]
----
public Task<object> GetFooAsync()
{
return null; // Noncompliant: Causes a NullReferenceException if awaited.
}
----
==== Compliant solution
[source,csharp,diff-id=2,diff-type=compliant]
----
public Task<object> GetFooAsync()
{
return Task.FromResult<object>(null); // Compliant: Method can be awaited.
}
----
include::../resources.adoc[]
* C# Language Design - https://github.com/dotnet/csharplang/issues/35[Proposal Champion "Null-conditional await"]
include::../rspecator.adoc[]