Eric is obviously an expert here, and his advice sounds, but to answer your specific question:
In the first version, the async in the method does not matter, and your GetStringAsync method returns the same Task<string> that client.GetStringAsync will return.
In the second version, the async in the method is required because you are using await in the method, and the await keyword creates and returns a separate Task<string> , which ends after it has client.GetStringAsync completed. When this happens, await then evaluates the string that was received asynchronously with client.GetStringAsync , which is returned as a result of your asynchronous method.
So, for the calling GetStringAsync , they are functionally the same, but the first version is cleaner.
source share