C# Error
CS1997 – Since ‘{0}’ is an async method that returns ‘Task’, a return keyword must not be followed by an object expression. Did you intend to return ‘Task
Reason for the Error & Solution
Since is an async method that returns Task
, a return keyword must not be followed by an object expression. Did you intend to return Task<T>
?
Example
The following sample generates CS1997:
using System.Threading.Tasks;
class C
{
public static async Task F1()
{
return await Task.Factory.StartNew(() => 1);
}
}
To correct this error
A return
statement in an async
method returns the result of an awaitable statement. If the awaitable statement does not have a result, the state machine emitted by the compiler encapsulates returning the non-generic Task
, eliminating the need for a return
statement. Encountering error CS1995 means the referenced code includes a return
statement that conflicts with the async
modifier and the method’s return
type. The error indicates that the current method’s implementation does not align with its initial intent. The simplest way to correct the error is to remove the return
statement:
public static async Task F1()
{
await Task.Factory.StartNew(() => 1);
}
But, the resulting implementation no longer needs the async
modifier or the await
operator. A more accurate way of correcting this error is not to remove the return
statement, but to remove the async
modifier and the await
operator:
public static Task F1()
{
return Task.Factory.StartNew(() => 1);
}