I think I missunderstanding the behaviour of async
await
in c#.
I have two methods that return a Task
defined like
public async Task Name()
{
await AsyncOperation()
}
Imagine AsyncOperation()
like an PostAsync
of HttpClient
.
Now I call them inside some other methods
public asyn Task Method()
{
await Name1(() => { "bla bla"});
await Name2();
Console.WriteLine("Continue");
}
This works as expected to me. Waits until Name1()
and Name2()
finish and then continues.
Now I need to nest Name1()
and Name2()
. In fact Name1()
is a Please Wait Window that recieve as lambda parameters a slow operation, while Name2()
is a slow download of a file. I want the Plese Wait window appears while the file is downloaded.
So I try something like this:
public asyn Task Method()
{
await Name1( async ()=>
{
await Name2();
}
Console.WriteLine("Continue");
}
In this case the execution doesnt wait untile Name2()
finished. Why this happen and await
doesnt wait?
Update
This is the logic behind the method of please wait. It shows a Please Wait message using Mahapps Dialogs, executes the code that recieves by the lambda, and then close the please wait message.
public static async Task Name1(Action longOperation)
{
_progressController = await _metroWindow.ShowProgressAsync("Please wait...");
await Task.Run(() => longOperation());
await _progressController.CloseAsync();
}