CRR0054 - Async method is called in sync context
- 2 minutes to read
This analyzer identifies places where an async method is called from regular synchronous code, and the resulting task is ignored, producing a fire-and-forget[1] task:
private Task DoWorkAsync(CancellationToken token) {
// long running async operation
}
public void DoWork(CancellationToken token) {
// do something
DoWorkAsync(token); // <-- CRR0054 is reported here
// do something else
}
You can fix this warning as follows:
- Add the await operator to the method call
If you do not mean the fire-and-forget behavior, add
await
to the method call:- Add a discard
Assign the task returned from this call to a discard[2] if fire-and-forget behavior is intended:
-
Fire-and-forget methods in C# allow you to run a task without awaiting its completion. They are useful for executing background tasks without blocking the main application flow.
-
A discard in .NET (from C# 7.0 and later) is a feature that allows you to specify that you want to ignore a value that would otherwise be returned or produced by an operation, such as a method call, tuple deconstruction, or pattern matching.