Получение результата асинхронной операции08.12.2022, 11:56. Показов 772. Ответов 14
Метки нет (Все метки)
Добрый день.
Данная тема в продолжение этой темы. В общем не понимаю, где споткнулся, но после запроса форма зависает наглохо. Код формы Кликните здесь для просмотра всего текста
Код класса TestService Кликните здесь для просмотра всего текста
Код класса RRepository Кликните здесь для просмотра всего текста
Как получить значение из задачи?
0
|
||||||||||||||||
| 08.12.2022, 11:56 | |
|
Ответы с готовыми решениями:
14
Не срабатывает отмена асинхронной операции в BackgroundWorker
|
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
|
||||||
| 08.12.2022, 12:19 | ||||||
0
|
||||||
|
|
||
| 08.12.2022, 12:42 | ||
|
И reader.Close() c connection.Close() при использовании их в using не надо... При выходе из видимости using - объекты уничтожаются и соединения разрываются.
0
|
||
| 08.12.2022, 13:19 [ТС] | ||||||||||||
|
kotelok, в чём принципиальное отличие этого (у меня)
В литературе написано, что в месте обращения к свойству Task.Result будет ожидание выполнения задачи и она выполняется, но результат, видимо, так и не возвращается в форму.
0
|
||||||||||||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
|
||
| 08.12.2022, 13:25 | ||
Сообщение было отмечено Uswer как решение
РешениеЕсли 'await', то управление вернётся в UI-поток, операция выполнится асинхронно (хотя, там может зависеть от внутренней реализации), после чего отработает весь хвост метода, который идёт после асинхронного вызова (либо в UI-потоке, либо в другом, зависит от наличия контекста и явных указаний через GetAwaiter). Добавлено через 3 минуты Насколько помню, если делать ".Result" из UI-потока у которого есть контекст и у которого дефолтный 'GetAwaiter(true)' не переопределён, то UI-поток блокируется на время выполнения, а после завершения метода (т.к. true), остаток метода пытается выполниться в заблокированном UI-потоке (т.е. он ждёт, пока поток разблокируется, но поток разблокируется только когда тот ожидающий завершится). Результат - дедлок.
1
|
||
|
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,452
|
|
| 08.12.2022, 13:29 | |
|
0
|
|
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
|
|
| 08.12.2022, 13:29 | |
|
Ну т.е. вы либо сделайте 'ConfigureAwait(false)', либо уберите Result/Wait().
0
|
|
|
|
||||||||||||
| 08.12.2022, 13:44 | ||||||||||||
|
Добавлено через 1 минуту Uswer, Книжку вы видать не до конца прочитали... Добавлено через 2 минуты Uswer, Показываю еще раз Полностью асинхронный метод чтения из БД
1
|
||||||||||||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
|
|
| 08.12.2022, 14:29 | |
|
Вот, нашёл, тут более подробно рассказано (в частности про дедлок в WF/WPF):
https://habr.com/ru/company/dododev/blog/435666/
0
|
|
| 08.12.2022, 15:16 [ТС] | |||||||||
![]() Так, хорошо, с вызовом разобрался. Подскажите пожалуйста как можно в классе реализовать функцию возвращающую значение, а не Task, при том, что внутри функции предполагаются асинхронные вызовы? То есть желательно чтобы данная функция вызывалась синхронно, но при этом сама использовала асинхрон, например:
0
|
|||||||||
|
|
||||||||
| 08.12.2022, 15:25 | ||||||||
|
Добавлено через 1 минуту
Uswer, Я же вам уже говорил, при использовании async/await ВСЕ вызовы СНИЗУ и ДОВЕРХУ - асинхронные. Самый последний метод, который в самом верху, с типом void.
0
|
||||||||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
|
|||||||
| 08.12.2022, 15:45 | |||||||
|
Создайте таск, которому на вход передайте метод, который возвращает таск, сконфигурируйте 'ConfigureAwait' в 'false', запросите 'awaiter', а у него результат. Конфигурировать/запрашивать всё это у самого метода не очень удачная идея, т.к. внутри могут быть await-вызовы, которые этого не сделают, а потому упрутся в тот самый дедлок. На базе старого примера. В данном случае, вызывающий поток будет заблокирован на 2 секунды, после чего получит результат:
0
|
|||||||
|
|
||
| 08.12.2022, 15:55 | ||
|
Добавлено через 1 минуту Это если консольное приложение, в WF или WPF значения не имеет, там будет верхним методом обработчик события (WF) или команда (WPF).
0
|
||
| 08.12.2022, 16:14 [ТС] | |
|
kotelok, понятно.
0
|
|
| 08.12.2022, 16:14 | |
|
Помогаю со студенческими работами здесь
15
Написать программу, обеспечивающую выбор пользователем математической операции и расчѐт результата Таймаут асинхронной операции
Зависание окна при выполнении асинхронной операции Отображение результата логической операции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|