"async Task then await Task" vs "Task then return task"
It is almost the same (in terms of threads etc.). But for the second one (using await
) a lot more overhead will be created by the compiler.
Methods declared as async
and using await
are converted into a state machine by the compiler. So when you hit the await
, the control flow is returned to the calling method and execution of your async
method is resumed after the await
when the awaited Task
has finished.
As there is no more code after your await
, there is no need to use await
anyway. Simply return the Task
is enough.
There are very few differences between the two approaches. Basically, they share the same semantics. However, the version with async/await wraps the execution of the inner task in an outer compiler-generated task. The non-async version does not. Thus, the non-async version is (very marginally) more efficient.