I've got an interface with some functions that return Task
. Some of the classes that implement the interface do not have anything to await, while others might just throw – so the warnings are spurious and annoying.
Is it possible to suppress these warnings? E.g.:
public async Task<object> test()
{
throw new NotImplementedException();
}
yields:
warning CS1998: This async method lacks 'await' operators and will run
synchronously. Consider using the 'await' operator to await
non-blocking API calls, or 'await Task.Run(…)' to do CPU-bound work
on a background thread.
Best Answer
Methods returning
Task
, I believe.async
is an implementation detail, so it can't be applied to interface methods.In these cases, you can take advantage of the fact that
async
is an implementation detail.If you have nothing to
await
, then you can just returnTask.FromResult
:In the case of throwing
NotImplementedException
, the procedure is a bit more wordy:If you have a lot of methods throwing
NotImplementedException
(which itself may indicate that some design-level refactoring would be good), then you could wrap up the wordiness into a helper class:The helper class also reduces garbage that the GC would otherwise have to collect, since each method with the same return type can share its
Task
andNotImplementedException
objects.I have several other "task constant" type examples in my AsyncEx library.