Непонимание сродства потока при использовании 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
а потом я ждал этого.
Я думаю, что обе версии работают в новом потоке, но вторая не выдает никаких ошибок во время выполнения. Не знаю почему?