Redundant await expressions - SergeyTeplyakov/ErrorProne.NET GitHub Wiki
Asynchronous programming is much easier with high level language constructs like async/await
. Unfortunately this awesome feature could be overused. One good example is using async/await when they're redundant.
Consider following example:
public async Task<int> DoSomethingAsync() {
// ~~~~~~~~~~~~~~~~
// Async/Await is redundant because all exit points are awaitable.
return await DoSomethingForReal();
}
private async Task<int> DoSomethingForReal() {
await Task.Delay(42);
return 42;
}
Apparently, in method DoSomethingAsync
could be simplified by removing async
specifier from method declaration and changing return statement to return DoSomethingForReal()
.
Error prone detects such cases and shows warning and provides a code fixer that will remove await expression if all return statements are awaitable (and this is only await specifiers used in the method).