Mapping a user input string to a corresponding block of code
A problem with the code is that the async lambdas in the dictionary are actually async void.


  Async void methods have different error-handling semantics. When an exception is thrown out of an async Task or async Task&lt;T&gt; method, that exception is captured and placed on the Task object. With async void methods, there is no Task object, so any exceptions thrown out of an async void method will be raised directly on the SynchronizationContext that was active when the async void method started. -- Async/Await - Best Practices in Asynchronous Programming


It's also confusing because vcdLookup[commandName].DynamicInvoke() looks like a blocking call, but it isn't. Consider this code:

private static readonly Dictionary&lt;string, Delegate&gt; vcdLookup = new Dictionary&lt;string, Delegate&gt;
{
    { "OpenToDoList", (Action)(async () =&gt;
        {
            Console.WriteLine("Opening to-do list...");
            await Task.Delay(TimeSpan.FromSeconds(1));
            Console.WriteLine("Opened to-do list");
        })
    }
};

public static void RunCommand(string command)
{
    vcdLookup[command].DynamicInvoke();
    Console.WriteLine("Finished command");
}


If we call RunCommand("OpenToDoList"), the output is


  Opening to-do list...
  
  Finished command
  
  Opened to-do list


I would recommend instead to change vcdLookup to a Dictionary&lt;string, Func&lt;Task&gt;&gt;.

private static readonly IReadOnlyDictionary&lt;string, Func&lt;Task&gt;&gt; vcdLookup = new Dictionary&lt;string, Func&lt;Task&gt;&gt;
{
    { "OpenToDoList", async () =&gt;
        {
            StorageFile file = await Package.Current.InstalledLocation.GetFileAsync(@"ToDo.doc");
            await Launcher.LaunchFileAsync(file);
        }
    }
};

public static async Task RunCommandAsync(string command)
{
    SpeechRecognitionResult result = command.Result;
    string commandName = result.RulePath[0];
    await vcdLookup[commandName]();
}




A couple of other notes:


Async methods should have the suffix Async, by convention
You probably don't want to make vcdLookup public, exposing it to the world
You can declare vcdLookup as an IReadOnlyDictionary so that its contents are not modified after creation