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