powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / От чего может виснуть этот код?
19 сообщений из 44, страница 2 из 2
От чего может виснуть этот код?
    #40061141
felix_ff


много пиндосских букв. моего мозга не хватает чтобы всё это постичь. так нужен конфигюр или не нужен?
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061145
petalvik
Бариску Нацарство,

Вот этот код ошибочен:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
Правильный код:

[src c#]
private async void Form1_LoadAsync(object sender, EventArgs e)
{
    await LoadSomeEntities1();
    await LoadSomeEntities2();
    await LoadSomeEntities3();
}




Почему даже после этого методы Load...() исполняются последовательно?
В логах видно, что каждый следующий стартует только после окончания предыдущего. Разве они не должны стартовать одновременно и заканчиваться, как успеют?
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061173
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бариску Нацарство
Почему даже после этого методы Load...() исполняются последовательно?

ОМГ, а как же они еще должны выполняться по-твоему, если перед каждым стоит await?

Я еще раз говорю - погугль, почитай доки и т.п. чтобы разобраться для чего вообще ConfigureAwait нужен.
подсказка - можешь сразу просто гуглить что такое synchronization context
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061188
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бариску Нацарство
много пиндосских букв. моего мозга не хватает чтобы всё это постичь. так нужен конфигюр или не нужен?


Не нужен.
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061194
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Не нужен.

Вообще-то нужен когда х/з что и как будет твой код вызывать. Линтеры так-то на его отсутствие ворчат. Я обычно просто из-за этого пишу, хотя лично мне-то он как раз вообще пофиг, т.к. работаю только с ASP.NET Core.
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061214
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бариску Нацарство
так нужен конфигюр или не нужен?
Блин, зависит от способа использования. В случае неиспользования в одном случае - дедлок, в случае использования - в другом случае - проблемы с контекстом синхронизации. Как это объяснить в двух словах, если ты за пять лет не смог в этом разобраться (даже в await)? Не получается учебник на английском - возьми перевод - Троелсен, Албахари и т.п., везде разжевывается многопоточность и с чем ее едят, что такое таски, что такое аваиты и т.п.
Бариску Нацарство
Я 5 лет работал в компании, где, в соответствии утверждениям Скита, .ConfigureAwait(false) висел на каждом await, и мои пулл реквесты не одобряли, пока я не добавлял их.
Ну так может вы писали код там, где не было контекста синхронизации. Ты выдернул проблематику из контекста и пытаешься теперь везде ее пихать, да еще прикрываешь своё незнание ссылкой на авторитеты.
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061222
fkthat
ОМГ, а как же они еще должны выполняться по-твоему, если перед каждым стоит await?


а зачем тогда нужны эти async и его await, если всё равно как выполнялось синхронно, так и выполняется?
гораздо проще старые, проверенные Task.Run(). Они-то по крайней мере точно выполняются параллельно.
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061224
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бариску Нацарство
а зачем тогда нужны эти async и его await, если всё равно как выполнялось синхронно, так и выполняется?
гораздо проще старые, проверенные Task.Run(). Они-то по крайней мере точно выполняются параллельно.
О боже. Знания о многопоточности даже не на уровне юниора.
Будешь читать учебник, заодно посмотри, чем отличается асинхронность от многопоточности.
За книжки бегом!
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061242
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Не нужен.

Вообще-то нужен когда х/з что и как будет твой код вызывать. Линтеры так-то на его отсутствие ворчат. Я обычно просто из-за этого пишу, хотя лично мне-то он как раз вообще пофиг, т.к. работаю только с ASP.NET Core.


Ток для библиотек. Можно даже Fody настроить, чтобы автоматом добавлял.
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061243
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бариску Нацарство
а зачем тогда нужны эти async и его await, если всё равно как выполнялось синхронно, так и выполняется?
гораздо проще старые, проверенные Task.Run(). Они-то по крайней мере точно выполняются параллельно.


Ну вот и используйте Task.Run().
Главное чтобы вас лично всё устраивало.
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061244
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Ток для библиотек.

Ну да, я это и имел в виду под "х/з кто будет вызывать".

hVostt
Можно даже Fody настроить, чтобы автоматом добавлял.

Так даже студия это умеет по "Ctrl+точка".
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061246
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Ну вот и используйте Task.Run().

Судя по тому что пишет автор, представляю что это будет :))
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061247
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Так даже студия это умеет по "Ctrl+точка".


Fody немного иначе работает, он модифицирует dll, добавляя туда вызовы для каждого await.
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061248
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Ну вот и используйте Task.Run().

Судя по тому что пишет автор, представляю что это будет :))


Будет очередной легаси :)
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40061303
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Бариску Нацарство
Почему даже после этого методы Load...() исполняются последовательно?

ОМГ, а как же они еще должны выполняться по-твоему, если перед каждым стоит await?

Я еще раз говорю - погугль, почитай доки и т.п. чтобы разобраться для чего вообще ConfigureAwait нужен.

Не. Тут сначала нужно читать про то, как вообще await устроен и действует. Налицо факт полного непонимания основных концепций этой фичи.
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40069132
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бариску Нацарство

Код: c#
1.
2.
3.
4.
5.
6.
private async void Form1_LoadAsync(object sender, EventArgs e)
{
    await LoadSomeEntities1();
    await LoadSomeEntities2();
    await LoadSomeEntities3();
}



Почему даже после этого методы Load...() исполняются последовательно?


Потому что перед каждым стоит await.

Так они будут выполняться одновременно:

Код: c#
1.
2.
3.
4.
5.
6.
7.
private async void Form1_LoadAsync(object sender, EventArgs e)
{
    var t1 = LoadSomeEntities1();
    var t2 = LoadSomeEntities2();
    var t3 = LoadSomeEntities3();
    await Task.WhenAll(t1, t2, t3);
}


Но это если они не обращаются к одним и тем же объектам. Конкуррентный доступ, все дела...

Бариску Нацарство

а зачем тогда нужны эти async и его await, если всё равно как выполнялось синхронно, так и выполняется?
гораздо проще старые, проверенные Task.Run(). Они-то по крайней мере точно выполняются параллельно.


Вызов await LoadSomeEntities1(); не подвешивает текущий поток. Например, GUI продолжает отрисовываться и реагировать на действия пользователя.
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40069135
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробую объяснить простыми словами, зачем всё-таки нужен ConfigureAwait.

Когда мы пишем вот так:

Код: c#
1.
2.
3.
await ReadEntitesFromDB();
// или так
await ReadEntitesFromDB().ConfigureAwait(true);



То перед вызовом этого метода захватывается контекст. А после его окончания выполнение возвращается в этот же контекст. Грубо говоря, в тот же поток.
Но этот поток может быть занят какой-то другой задачей. Например, поток GUI может делать отрисовку в событии Paint. Поэтому может быть существенная задержка - ожидание освобождения потока.

А если мы напишем так:

Код: c#
1.
await ReadEntitesFromDB().ConfigureAwait(false);


То после окончания выполнения метода продолжение может быть сделано в любом свободном на этот момент потоке.
Поэтому использование ConfigureAwait(false) в целом ускоряет выполнение, устраняя лишние ожидания.

Поэтому в библиотечном коде рекомендуется практически всегда использовать именно false.

Однако в коде приложения не всегда можно продолжить выполнение в другом потоке.
В частности, если нужно обратиться к контролам формы (TreeView). Обращаться к ним можно только из того потока, в котором они были созданы. Поэтому без ConfigureAwait(false) придётся использовать Invoke. А с ним этого не нужно - мы гарантированно вернулись в нужный поток.
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40069148
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дело не в потоках, а контексте выполнения/синхронизации, забудь слово потоки
...
Рейтинг: 0 / 0
От чего может виснуть этот код?
    #40069383
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
дело не в потоках, а контексте выполнения/синхронизации, забудь слово потоки


Наоборот. Всё дело в потоках.
Консольные приложения никогда не имели контекста синхронизации. В ASP.NET Core SynchronizationContext тоже выпилили. Так куда возвращается выполнение после завершения асинхронного кода?
...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / От чего может виснуть этот код?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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