I am trying to master async method syntax in .NET 4.5.  I thought I had understood the examples exactly however no matter what the type of the async method is (ie Task<T>), I always get the same type of error error on the conversion back to T - which I understood was pretty much automatic.  The following code produces the error:
Cannot implicitly convert type '
System.Threading.Tasks.Task<System.Collections.Generic.List<int>>' to 'System.Collections.Generic.List<int>'
public List<int> TestGetMethod() {     return GetIdList(); // compiler error on this line }   async Task<List<int>> GetIdList() {     using (HttpClient proxy = new HttpClient())     {         string response = await proxy.GetStringAsync("www.test.com");         List<int> idList = JsonConvert.DeserializeObject<List<int>>();         return idList;     } }   It fails if I explicitly cast the result as well. This:
public List<int> TestGetMethod() {     return (List<int>)GetIdList();  // compiler error on this line }   somewhat predictably results in this error:
Cannot convert type '
System.Threading.Tasks.Task<System.Collections.Generic.List<int>>' to 'System.Collections.Generic.List<int>'
Any help greatly appreciated.
The main issue with your example that you can't implicitly convert Task<T> return types to the base T type. You need to use the Task.Result property. Note that Task.Result will block async code, and should be used carefully. 
Try this instead:
public List<int> TestGetMethod()   {       return GetIdList().Result;   } 
                        You need to make TestGetMethod async too and attach await in front of GetIdList(); will unwrap the task to List<int>, So if your helper function is returning Task make sure you have await as you are calling the function async too.
public Task<List<int>> TestGetMethod() {     return GetIdList(); }      async Task<List<int>> GetIdList() {     using (HttpClient proxy = new HttpClient())     {         string response = await proxy.GetStringAsync("www.test.com");         List<int> idList = JsonConvert.DeserializeObject<List<int>>();         return idList;     } }   Another option
public async void TestGetMethod(List<int> results) {     results = await GetIdList(); // await will unwrap the List<int> } 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With