|
53 / 7 / 1
Регистрация: 06.10.2020
Сообщений: 221
|
|
.NET 7 Можно ли использовать синхронные методы в асинхронных05.07.2023, 19:39. Показов 2123. Ответов 34
Метки нет (Все метки)
Возник небольшой вопрос. Хочу вынести некоторый код в другую функцию (возможно, даже в другой класс) чтобы не засорять асинхронный метод. Можно ли так делать? По идее, код в асинхронном методе и код в отдельной функции, которую вызывает асинхронный метод должен выполняться одинаково.
0
|
|
| 05.07.2023, 19:39 | |
|
Ответы с готовыми решениями:
34
Какие методы UserManager следует использовать - синхронные или асинхронные? Чем синхронные операции отличаются от асинхронных? Реализовать «синхронные» методы чтения/записи для переменной типа String в java |
|
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 991
|
||||||||||||
| 07.07.2023, 11:28 | ||||||||||||
|
и что вы порекомендуете почитать? п.с. то что ассинхроные методы типа
и все равно не очевидно какой код полезет выполнять UI поток после строки
0
|
||||||||||||
|
|
|
| 07.07.2023, 11:41 | |
|
golosalex, Вы не понимаете как оно работает и потому не можете вникнуть. Код никуда не идёт, он ставит вызывающий метод на паузу, а сам в это время может обрабатывать чего-то другое - нажатия кнопок в UI, сообщения системы т.д. Когда завершится работа в методе, который вызвали через await, код продолжит вызывающий метод с данными, которые получили из Task.
И в консольном приложении тоже можно такое провернуть, есть статья на эту тему - Asynchronous programming with async and await. Я же вам не зря сказал - читайте литературу, запрос в поиск - c# async/await... И самое главное - асинхронность в коде должна быть снизу вверх во всех методах которые её используют. Вот тогда всё будет работать как нужно.
0
|
|
|
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 991
|
|||||||||||||||||
| 07.07.2023, 12:23 | |||||||||||||||||
|
в обработчике события процесс снаружи выглядит по другому: UI поток выполняет код синхронно, пока не натолкнется на Await,
так вот вопрос: что это за "очередь задач", куда уходил поток после await, как остальные задачи туда попадают, как они вызываются, и как "огрызок" исходной задачи понял в какую очередь лезть (видимо тут замешан контекст синхронизации). и вот если открыть пустое консольное приложение, то не ясно как такой механизм реализовать для главного потока. а если полезть вверх по комментам и вспомнить то о чем говорит автор топика, то какая разница, что будет внутри у метода BigAsyncMethod синхронный вызов или await ассинхронного? UI потоку вообще пофигу, он пошел следующую таску делать.
0
|
|||||||||||||||||
|
|
||
| 07.07.2023, 12:38 | ||
|
0
|
||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,235
|
||
| 07.07.2023, 13:19 | ||
|
0
|
||
|
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 991
|
|||||||
| 07.07.2023, 13:33 | |||||||
|
если про последний, то там после эвейтов все делается в тредпульных потоках
а разварачивается все в машину состояний, там достаточно сложный код, но будет он делать не тоже самое что и обработчики событий UI потока. когда все продолжения делаются в тредпульном потоке, все понятно, но а если я захочу, чтобы все сообщения в консоль писались только одним первым главным потоком, как в UI?
0
|
|||||||
|
|
||||||
| 07.07.2023, 13:53 | ||||||
|
golosalex, А вот теперь смотрите, я добавил в цикл вывод сообщения после итерации
Так что цикл выполняется в основном потоке, пока все задачи работают...
0
|
||||||
|
|
|
| 07.07.2023, 13:54 | |
|
golosalex, Именно так и работает цикл сообщений в графических UI.
0
|
|
|
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 991
|
|||||||
| 07.07.2023, 14:02 | |||||||
а в том коде что я выше написал, явно видно, что в консоль пишут тредпульные потоки. вот объясните как добились такого эффекта, без очереди задач?
0
|
|||||||
|
|
|||
| 07.07.2023, 14:15 | |||
|
Синхронизация контекста это немного из другой оперы. Тем более, если не изменять коллекции, а действовать только с элементами типа TextBox, то ничего страшного в потоках не будет. Диспетчер сам разрулит это.
0
|
|||
|
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 991
|
||||
| 07.07.2023, 14:27 | ||||
|
сомневаюсь что хоть какие-то свойства в UI менять из разных потоков безопасно. чуть поехала верстка - невалидное состояние объектов - падение с непредсказуемой ошибкой.
0
|
||||
|
|
||||
| 07.07.2023, 14:46 | ||||
|
Но всё это лирика... Вы разобрались что такое async/await? В какой код они разворачиваются? Если нет, то возьмите книжку Джозефа и Бена Албахари любую, на выбор и прочитайте главу про Параллелизм и асинхронность. Вот там подробно рассказано что такое async/await, и как оно работает, и какому коду с Task оно соответствует.
0
|
||||
|
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 991
|
|||
| 07.07.2023, 15:16 | |||
|
и как же добились такого реально полезного эффекта в обработчиках событий, что продолжение делает не какой-то а именно UI поток. если свойство менять не у UI элемента, а у ViewModel, то там ничего страшного, а вот у компонента напрямую я бы не рискнул, да и ошибка будет, так как [STAThread] на UI потоке стоит и все UI элементы надо через диспетчер менять.
0
|
|||
|
|
||||||||
| 07.07.2023, 15:47 | ||||||||
|
Разметку меняет только сам View и его поток, больше никто. А в классе Window это решить проще простого
В консоли полезность этого сомнительна
0
|
||||||||
|
Модератор
|
||||
| 12.07.2023, 22:38 | ||||
|
Для INotifyCollectionnnChanged.CollectionCha nged и ICommand.CanExecuteChanged маршалинга нет и их вызов не из UI потока приведёт к исключению. Если рассматривать UWP там наоборот: для CollectionChanged и CanExecuteChanged есть маршалинг, а для PropertyChanged - нет. Для платформ Xamarin, Avalonia, UNO и др. - не знаю. Нужно проверять. Для Форм привязки тоже есть, но как там с маршалингом в UI поток - не знаю. Это один из способов обеспечения потокобезопасности - нужно для синхронизации с графической системой. Когда с объектом происходит взаимодействи только в одном потоке - это гарантирует его потокобезопасность.
0
|
||||
| 12.07.2023, 22:38 | |
|
Можно ли методы типа bool использовать в условиях? (NullReferenceException) Какие методы можно использовать для решения данной математической модели?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|
|
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж»
Уважаемые коллеги!
Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
|
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
|
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
|
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
|