|
3 / 3 / 1
Регистрация: 24.02.2024
Сообщений: 131
|
|||||||||||
Корректна ли обёртка асинхронной задачи над синхронной?26.03.2024, 09:26. Показов 2319. Ответов 26
Доброе утречко!
Есть несколько разных возможностей метода сохранения, и задолбался писать спагетти-код, хочу создать отдельный метод, в котором будет лог о удачном и неудачном сохранении. Но нужно 2 метода один синхронный, второй асинхронный. Код компилируется, но мне интересно, вообще правильный ли это подход, и всегда ли будет корректно это работать?
Больше беспокоит, будет ли корректно вызываться асинхронный метод, ведь мы его в итоге выполним в синхронном?
0
|
|||||||||||
| 26.03.2024, 09:26 | |
|
Ответы с готовыми решениями:
26
Отличие BackgroundWorker от асинхронной (синхронной) многопоточности
|
|
3 / 3 / 1
Регистрация: 24.02.2024
Сообщений: 131
|
||||||||||||||||||||
| 27.03.2024, 08:49 [ТС] | ||||||||||||||||||||
Я пытаюсь отловить ошибку в самом низу, и если она понадобится кому-то выше, то передать её через Result (до востребования) И теперь вызовы метода выглядят компактнее и чище, а вывод пользователю может содержать больше данных, чем стандартный Exception.
То есть по сути, хочу избавиться от try catch и Exception в UI совсем. Так никогда не делал, сейчас проверил, получается ещё одна странная конструкция . async у метода нет, но вызывать его можно с await и он всё равно дожидается выполнения ![]() Я правильно понимаю, метод возвращающий Task без использования async это возможность синхронный код интегрировать в асинхронную модель? Это вместо await Task.Run(() => ...);? Подскажите на примере ClosedXML. Есть у меня приложение и мне нужно прочесть excel 1Gb. У библиотеки ClosedXML нет асинхронных методов, но читает она его очень долго, поэтому дождаться выполнения обязательно нужно. В таком случае мне код лучше создавать в методе, возвращающем Task без использования async? Или же весь код по чтению файла обернуть в await Task.Run(()=> ); ![]() А вот потом пока это имеет смысл А как же синхронные методы, как их отличить не то что разработчику, а компилятору?
0
|
||||||||||||||||||||
|
|
||
| 27.03.2024, 09:22 | ||
|
Никто так не делает... Пользователь должен быть уведомлён о том что что-то произошло и иметь возможность безопасно завершить свою работу с приложением. Добавлено через 17 минут gazed, Если уж не хочется руками писать try..catch, то смотрите в сторону вот этого - AppDomain.UnhandledException Событие.Добавлено через 3 минуты gazed, И в паре с ним вот это - Application.ThreadException Событие. Для форм.
2
|
||
|
3 / 3 / 1
Регистрация: 24.02.2024
Сообщений: 131
|
||||||||
| 27.03.2024, 17:32 [ТС] | ||||||||
|
То есть сам Exception ни куда не делся, просто не хочу постоянно отлавливать одну и ту же ошибку.
p.s. Как я понимаю, так не принято делать, но вот сам язык это позволяет реализовать? Добавлено через 1 минуту Как в Minimal API можно выбрасывать Exception, а можно Result в формате, который прочтёт клиент, вместо обычного Exception.
0
|
||||||||
|
|
|||
| 27.03.2024, 17:58 | |||
|
Если обёрнутый эшен в трай вызовет исключение, то в catch выполнится обработчик ошибки. В котором будет выполнено что вы хотите - разблокировка кнопок, логирование, сообщение об ошибке и т.п. и т.д. Вообщем фантазия на эту тему не ограничена. Логирование, диалоги, выключение компутера...
1
|
|||
|
Модератор
|
||||||||||||||
| 27.03.2024, 22:27 | ||||||||||||||
Show - это уровень Представления (ну, в край вызов в VM внедрённого метода Представления).Как я вам и сказал выше, что функция обработки исключений это уровень Представления. Так нужно делать только на уровне Представления. Исключение поднялось на уровень Представления, и там его хотите показали пользователю, хотите передали в службу логирования. Это уже функция представления, а не БЛ. Условно представьте себе: - Модель работает на Юпитере. - Презентер/контролер/VM на Луне - На Земле работает только представление. Чего и кому будет выводить на Юпитере такая обработка исключений? Исключение должно быть передано на Землю, чтобы его мог человек посмотреть или записать в какой-то блокнот (логирование), чтобы потом разобраться. Типы возвращаемых значений асинхронных операций Такой код тоже будет выполняться синхронно, хотя и будет выводится предупреждение:
Прекрасный пример UI элементы Форм и WPF. Работа с ними может выполняться асинхронно, но никогда не может выполняться параллельно. постоянно отлавливать одну и ту же ошибку.Во-первых, не путайте ошибки и исключения. Это совершенно разные сущности. Во-вторых, почему вы считаете что обработка исключений "внизу" уменьшает код? Да, даже если так - это всё равно делает код намного запутаннее и непонятнее. А ГЛАВНОЕ для чего придуман ООП - это сделать код модульным, простым и понятным. Даже если при этом он буде больше, длиннее. Например, у вас есть какой-то запрос к нестабильной линии. Если на линии не проходит сигнал - выкидывается исключение. Но вы делаете несколько попыток. Вот обработка однократных исключений на уровне БЛ - это перевод исключения в обрабатываемые ошибки. Но повторили 10 раз, а соединения так и нет. Это уже исключение. И его не надо обрабытывать в БЛ. Его нужно прокинуть вверх для уведомления потребителей.
1
|
||||||||||||||
|
3 / 3 / 1
Регистрация: 24.02.2024
Сообщений: 131
|
||||
| 27.03.2024, 23:10 [ТС] | ||||
|
При замене UI эти все исключения нужно создавать заново. Я не говорю что так неправильно или не хорошо, мне лично не нравится, чтобы UI был загажен и обрабатывал логику. И уже любой уровень хоть то Луна, хоть то Земля, может взять эти данные и обработать. Допустим Луна добавит (если необходимо) туда ещё свои комментарии, в этот же объект Result и передаст уже более точное описание. Или же если Луне пришло исключение, и она может изменить ход событий, то она делает повторную попытку и т.д., но не сама Земля. И уже последняя Земля выведет и покажет человеку разумному эти сообщения и исключения. Но сама Земля не беспокоится о exception, а знает, что все возможные исключения, будут отловлены, и доставлены ей на блюдечке с голубой каёмочкой ![]() Вот с такой моделью у меня всё ок было, когда я делал синхронный код, а когда асинхронный, боюсь, чтобы это исключение не застряло где-то на Юпитере или Луне, и что до Земли придёт что всё ок, а на самом деле не ок. Единственный минут, это то, что всё приложение завязано на FluentResults, который там на всегда.
0
|
||||
|
Модератор
|
|||
| 28.03.2024, 21:36 | |||
|
Но Модель это слой, а не один объект. А если у вас на каждой планете по своему классу Модели. А если у какой-то планеты нет спутника на котором можно разместить ServiceBase? Поймите, мы вам не говорим о том, что ваш код не будет работать. Мы о том, что он неверно скомпонован согласно принципов ООП. Если вам всё равно их нарушение - то всё ок. "Работает - ну, и ладно". Добавлено через 15 минут gazed, ООП это не только спек языка. На языке многое можно написать. ООП это в первую очередь про ВЗАИМОПОНИМАНИЕ разработчиков, что особенно важно в коллективном программировании, на которое и нацелено ООП. А взаимопонимание, в том числе, это и одинаковые подходы к решению одинаковых задач.
1
|
|||
| 28.03.2024, 21:36 | |
|
Обёртка над opengl Обёртка над WinAPI
GUI обертка над консолью Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|