powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Зачем нужен await?
25 сообщений из 252, страница 9 из 11
Зачем нужен await?
    #39685001
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Чет ты перегнул.
Как вставить по стеку в глубине, если async не поддерживает стек?

ну заведомо синхронные методы -- синхронные, без фанатизма, их намного больше.
но все сервисы, службы, шины, менеджеры, и прочее -- асинхронные.
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685006
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Ну, понятно. async First это просто "делайте чаще чтобы гуи не морозило))
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685013
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Ну в целом, знать как это устроено внутри полезно, но для использования нужно абстрагироваться. Нужно было бы. Если бы C# изначально проектировался с async/await, возможно получился бы простой и лёгкий синтаксис, как в Go.
А что в GO такого легкого и простого?
Ужасные горутины и каналы?
Просто мерзкая обработка ошибок?
И никакого ГУЯ!
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685017
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВА что в GO такого легкого и простого?
Ужасные горутины и каналы?
Просто мерзкая обработка ошибок?
И никакого ГУЯ!

почему ужасные? сравнивать напрямую нельзя конечно, так как другая парадигма.

кстати, в .NET тоже будут каналы, скоро.
пока в глубокой бете.
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685021
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttбудут каналы, скоро.вот я не понимаю почему сабж со стеком не работает?
Код: c#
1.
2.
3.
4.
5.
6.
Bool Metod1{
   if (Metod2(contextDb)) {
       CreateMap();
       CopyMap();
       return true;
   }


Вот как вставить асинхронный метод в метод2?
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685029
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вот я не понимаю почему сабж со стеком не работает?

что ты имеешь в виду?


Petro123Вот как вставить асинхронный метод в метод2?

сделать Metod2 асинхронным _)
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685030
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
почему ужасные? сравнивать напрямую нельзя конечно, так как другая парадигма.

Ужасные - это касалось горутин. Обычный запуск задачи в отдельном потоке.

hVosttкстати, в .NET тоже будут каналы, скоро.
пока в глубокой бете.
Про каналы ничего не имею против, особенно когда они допускают межпроцессорное и межкомпьютерное взаимодействие.
В .NET они уже были 9 лет назад.
Axum
Введение в язык программирования Axum
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685035
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttсделать Metod2 асинхронным _)как сделать без замены возврата bool?
Этод метод вызывается в куче мест.
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685036
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttчто ты имеешь в виду?CreateMap() будет вызвана до окончания потока внутри метода2.
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685039
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 18:38 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1300144&msg=21634863][21634878]
>...Нет, IDE не встанет заботливо на точку по месту ошибки. Те, кто привыкли так работать страдают и воют…
<Что-то не понимаю:
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685046
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВУжасные - это касалось горутин. Обычный запуск задачи в отдельном потоке.

Почему в отдельном потоке? Это уж как повезёт :)


ЕвгенийВПро каналы ничего не имею против, особенно когда они допускают межпроцессорное и межкомпьютерное взаимодействие.
В .NET они уже были 9 лет назад.

https://www.nuget.org/packages/System.Threading.Channels :)
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685047
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123как сделать без замены возврата bool?
Этод метод вызывается в куче мест.

никак, либо две версии метода
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685048
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев<Что-то не понимаю:

Код на скрне полностью синхронный.
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685059
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 20:31 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1300144&msg=21634947][21634947]

>Код на скрне полностью синхронный.
<А так:
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685063
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

И чего? Вы точку останова поставили.
Речь идёт о сваливании с исключением и остановкой дебагера на этом месте.
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685139
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПо поводу вопроса, ещё раз. Если ты вызовешь Wait или Result на таске вместо await, а внутри будет await без ConfigureAwait(false) будет гарантированный дедлок.По поводу вложенности еще раз. Если await без ConfigureAwait(false) на первом уровне - то дедлок понятен, а если, к примеру, первый-второй уровень вложенности идет с ConfigureAwait(false), а на третьем забыли. Будет ли дедлок и если да, то почему?
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685270
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProПо поводу вложенности еще раз. Если await без ConfigureAwait(false) на первом уровне - то дедлок понятен, а если, к примеру, первый-второй уровень вложенности идет с ConfigureAwait(false), а на третьем забыли. Будет ли дедлок и если да, то почему?

Вот тут всё ок.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
        private async void button1_Click(object sender, EventArgs e)
        {
            label1.Text = await TestAsync();            
        }

        private async Task<string> TestAsync()
        {
            label1.Text = "button1_Click: TestAsync running";
            await TestTestAsync().ConfigureAwait(false);
            // продолжение будет выполнено в другом потоке, отличном от UI
            return "button1_Click: TestAsync result";
        }

        private async Task TestTestAsync()
        {
            // вызов этого метода с ConfigureAwait() не влияет на выполнение этого метода
            await Task.Delay(TimeSpan.FromSeconds(1));
            // продолжение будет выполнено в UI потоке
            label1.Text = "button1_Click: TestTestAsync running";
        }



А здесь будет ошибка

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
        private async void button1_Click(object sender, EventArgs e)
        {
            label1.Text = await TestAsync();            
        }

        private async Task<string> TestAsync()
        {
            label1.Text = "button1_Click: TestAsync running";
            await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(false);
            // продолжение будет выполнено в другом потоке, отличном от UI
            // и это означает, что вызов TestTestAsync() не получит контекст синхронизации UI            
            await TestTestAsync();            
            return "button1_Click: TestAsync result";
        }

        private async Task TestTestAsync()
        {
            await Task.Delay(TimeSpan.FromSeconds(1));
            // здесь будет ошибка, так как контекст синхронизации был потерян
            label1.Text = "button1_Click: TestTestAsync running";
        }
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685272
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Необходимо понимать, что ConfigureAwait на сам вызов метода не влияет, только на продолжение.

Для кода, выполняемого после ConfigureAwait контекст потерян, и там уже не имеет значения, есть ConfigureAwait или нет.
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685321
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНеобходимо понимать, что ConfigureAwait на сам вызов метода не влияет, только на продолжение.это я понимаю. Я не понимаю какой-то другой нюанс в твоем изначальном примере и пытаюсь его нащупать...

Я, похоже, вот какой момент не до конца осознавал... при вызове асинхронного метода (в том числе каскадно) его (их) операторы будут выполняться в вызвавшем потоке до первого встреченного await-а. Я воспринимал, что операторы сразу начнут выполняться в другом потоке. И, кажется, я это знал, но забыл )) Отсюда все мои предыдущие вопросы можно аннулировать
Спасибо.
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685323
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttСейчас проекты пишутся async-first. Всё хорошо.При этом используется суффикс Async в названии каждого метода? Или забили, потому что они вообще все асинхронные?
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685353
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример, где ConfigureAwait(false) не спасает от дедлока, это только у меня так? (WinForms, VS2017, FW 4.5.2-4.6.2)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        private void button1_Click(object sender, EventArgs e)
        {
            button1.Text = FindAsync("http://www.sql.ru/forum/1300144-9/zachem-nuzhen-await",
                "Будет ли дедлок").Result;
        }
        private async Task<string> FindAsync(string uri, string s)
        {
            var data = await new WebClient().DownloadStringTaskAsync(uri).ConfigureAwait(false);
            return s + " - " + (data.IndexOf(s) >= 0 ? "найдено!" : "не найдено.");
        }


ConfigureAwait(false) лишь отменяет требование выполнять продолжение в первоначальном контексте, т.е., дает "добро" на любой контекст, в т.ч. не исключая первоначальный. В данном примере, вероятно, async-инфраструктуре "влом" идти и брать свободный поток из пула, и выбирается то, что "под боком" - а это (уже блокированный ожиданием .Result) UI-поток.
Или все происходит как-то по другому? Может кто-нибудь проверить этот пример у себя?
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685379
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProhVosttСейчас проекты пишутся async-first. Всё хорошо.При этом используется суффикс Async в названии каждого метода? Или забили, потому что они вообще все асинхронные?забить студия не даст.
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685391
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123забить студия не даст.С чего вдруг не даст? Даже решарпер - и тот не настаивает.
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685501
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЯ, похоже, вот какой момент не до конца осознавал... при вызове асинхронного метода (в том числе каскадно) его (их) операторы будут выполняться в вызвавшем потоке до первого встреченного await-а. Я воспринимал, что операторы сразу начнут выполняться в другом потоке. И, кажется, я это знал, но забыл )) Отсюда все мои предыдущие вопросы можно аннулировать

Да, до первого await, который вернёт незавершённую задачу (важное уточнение), всё будет синхронно.

Shocker.ProПри этом используется суффикс Async в названии каждого метода? Или забили, потому что они вообще все асинхронные?

Нет, не забили. Все асинхронные методы имеют суффикс Async. Контролируется на этапе сборки.
...
Рейтинг: 0 / 0
Зачем нужен await?
    #39685502
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProPetro123забить студия не даст.С чего вдруг не даст? Даже решарпер - и тот не настаивает.
хм... Проверил, ты прав. Убрал суффикс и не ругается.
...
Рейтинг: 0 / 0
25 сообщений из 252, страница 9 из 11
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Зачем нужен await?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]