Непонимание сродства потока при использовании Async/Await

Я работаю над Async/Await, у меня неправильное представление о том, что означает async / await.

// My background : I think every method which has the 'async' modifier will runs into a new thread, and when we use await keyword before calling it, we are actually waiting for this method to be completed.

здесь у меня есть какие-то вызовы функций:

 void Test()
 {
    ShowWaitDialog($"Search For \"{SearchKey.Text}\"", new Action(() =>
    {
        var Result = Business.Client.UserController.SearchUser(SearchKey.Text);

        for (int i = 0; i < Result.Count; i++)
        {

        }
    }));
 }

а также:

 void ShowWaitDialog(string Message, Action Action)
 { 
     var sb = new Storyboard();
     sb.Children.Add(fade);
     sb.Completed += async(sender, e) =>
     {
         await Task.Run(
                 new Action(() =>
                {
                   Action.Invoke();
                   RestoreWindow();
                }));
     };
 }

приведенный выше код будет сталкиваться с Cross-Thread access ошибка. но когда я переписываю ShowWaitDialog как показано ниже:

 void ShowWaitDialog(string Message, Action Action)
 { 
     var sb = new Storyboard();
     sb.Children.Add(fade);
     sb.Completed += async(sender, e) =>
     {
            Action.Invoke();
            RestoreWindow();
     };
 }

Я не увижу Cross-thread access ошибки. в приведенном выше коде я думаю, что оба Action.Invoke а также RestoreWindow запускаются в новом потоке, а в предыдущем примере я только что назвал Task.Run а потом я ждал этого.

Я думаю, что обе версии работают в новом потоке, но вторая не выдает никаких ошибок во время выполнения. Не знаю почему?

0 ответов

Другие вопросы по тегам