Здравствуйте, извиняюсь за вопрос по этой теме т.к существует довольно огромное количество статей об этих ключевых словах, но возможно такое количество статей и ввело меня в некое не до понимание.
Я просто хочу узнать правильно ли я все понял и задать походу пару вопросов.
- Начнем с async. Метод помеченный async разрешает нам внутри данного метода использовать await и требует что бы возвращаемый тип имел метод GetAwaiter.
- Ключевое слово await. Await ставится перед операцией которая выполняется во вторичном потоке. Он позволяет не дожидаться пока вторичный поток (IO или обычный Thread) закончит свое выполнение. Await просто оборачивает то, что идет после await в отдельный метод, который по callback вызывается когда отработает вторичный поток. Тем самым первичный поток продолжает выполняться дальше. А когда отработает вторичный поток из пула потоков возьмется рандомный поток который довыполняет вторую часть метода.
В итого что это дает в приложениях
- в приложениях с ui потоками(не до конца понятно что за ui поток, работаю исключительно asp.net) наш поток продолжит выполнение и не заблочит действия пользователя;
- в asp.net mvc у меня первичный поток освободится и будет работать только вторичный;
- и последнее синтаксический сахар который скрывает всю логику которая это делает.
Вопросы
- Правильно ли я все описал, действительно ли в этом смысл async await(разбить метод на две части и до выполнять вторую часть как callback, тем самым не задерживая первичный поток)?
- Что за метод configureawait?
- Почему многие говорят что эти ключевые слова не связаны с потоками. Ну как же await то ставится перед операцией, которая будет выполняться во вторичном потоке, да и суть то в чем, это конструкция была придумана что бы не держать первичный поток. Так что связь тут самая прямая или я не прав?
- Когда закончится выполняться вторичный поток, какой поток продолжит выполнять вторую часть метода. Тот самый вторичный поток? Или будет взят любой поток из thread pool?
UI- это User Interface, т.е. визуальный интерфейс программы (окна, кнопки, чекбоксы и проч.). Поток UI - это тот поток, который "обслуживает" пользовательский интерфейс программы. Это конечно же имеет отношение к дестопным приложениям. – Bulson Mar 15 '18 at 16:28