Awaiting tasks: Return task or await if no code after await
.net, async-await, task-parallel-library
Solution
`await` is used to continue execution of method body when awaiting completed. If there is nothing to continue, then you don't need awaiting.
You can think of await (simplified) as of `ContinueWith` operation. So, your first method is something like:
foreach (var something in someCollection)
DoSomething();
DoSomethingElse();
DoMethodAsync().ContinueWith(t => {});
There is nice MSDN article which describes what happens in async method which has nice code flow picture:
Problem
I've done a bit of reading, and think I have grasped the basics of the await and async keywords, with regards to System.Threading.Task. I'm not sure if I'm right over a small issue, however, and am looking for verification or for someone to correct me. I'm implementing an async method, with this signature: ``` public Task ProcessUploadedFile(FileInfo info, string contentType); ``` Obviously, if I want to await anything inside the method, I need to add the async keyword into the signature, My question is this: If the last thing that my method does is call another async method, or return a task, is there any point in awaiting it? Eg. 1: ``` public async Task ProcessUploadedFile(FileInfo info, string contentType) { foreach (var something in someCollection) DoSomething(); DoSomethingElse(); await DoMethodAsync(); } ``` 2: ``` public Task ProcessUploadedFile(FileInfo info, string contentType) { foreach (var something in someCollection) DoSomething(); DoSomethingElse(); return DoMethodAsync(); } ``` I initially wrote the former, but can no longer see the point in adding the await. If I were to write the latter, I accomplish the same thing, and the caller of both methods can still use the await keyword if they choose, no? Is there any difference in the above? Which is "better"?