I'm following this thread to make some of my commands Async while others sync but I'm having some trouble.
This is what I have so far.
An interface:
public interface ICommand
{
public Task ExecuteAsync();
}
Which I implement in a Wait Command which should be synchronous.
public class WaitCommand : ICommand
{
public Task ExecuteAsync()
{
Console.WriteLine("Sleeping...");
Thread.Sleep(5000);
Console.WriteLine("Waking up...");
return Task.CompletedTask;
}
}
And another command that does work and should be assynchronous.
public class ConcreteCommand : ICommand
{
public async Task ExecuteAsync()
{
await Task.Run(() =>
{
Console.WriteLine("Starting...");
Thread.Sleep(1000);
Console.WriteLine("Ending...");
});
}
}
Then I have some sort of method to read a string and convert it to a command:
public async Task ExecuteAsync(string commandName)
{
... get command
await command.ExecuteAsync();
}
And finally I have a loop
List<string> commands = new List<string>
{
"concreteCommand",
"wait",
"concreteCommand"
};
foreach (String command in commands)
{
await commandDispatcher.ExecuteAsync(command);
}
This is what it prints.
Starting...
Ending...
Sleeping...
Waking up...
Starting...
Ending...
Which means it's not running asynchronously. What's wrong in my implementation?