I am trying to use Func with Async Method. And I am getting an error.
Cannot convert async lambda expression to delegate type
'Func<HttpResponseMesage>'
. An async lambda expression may return void, Task orTask<T>
, none of which are convertible to'Func<HttpResponseMesage>'
.
below is my Code:
public async Task<HttpResponseMessage> CallAsyncMethod() { Console.WriteLine("Calling Youtube"); HttpClient client = new HttpClient(); var response = await client.GetAsync("https://www.youtube.com/watch?v=_OBlgSz8sSM"); Console.WriteLine("Got Response from youtube"); return response; } static void Main(string[] args) { Program p = new Program(); Task<HttpResponseMessage> myTask = p.CallAsyncMethod(); Func<HttpResponseMessage> myFun =async () => await myTask; Console.ReadLine(); }
Delegates enable you to call a synchronous method in an asynchronous manner.
The call to the async method starts an asynchronous task. However, because no Await operator is applied, the program continues without waiting for the task to complete. In most cases, that behavior isn't expected.
For more information, I have an async / await intro on my blog. So additionally, if a method with multiple awaits is called by a caller, the responsibility for finishing every statement of that method is with the caller.
As the error says, async methods return Task
,Task<T>
or void
. So to get this to work you can:
Func<Task<HttpResponseMessage>> myFun = async () => await myTask;
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