-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
|
|
В каких случаях Result после WhellAll может быть не вычислен?28.06.2018, 17:48. Показов 768. Ответов 10
Метки нет Все метки)
(
0
|
28.06.2018, 17:48 | |
Ответы с готовыми решениями:
10
В каких случаях может быть полезно присваивать полю GenerateMember значение false?
В каких случаях банк может потребовать объяснения появления денег? |
Администратор
![]() ![]() |
|
28.06.2018, 17:59 | |
Passerby, Task.WhenAll нужно await-ить. И раз тут await-ы, то вместо Thread.Sleep лучше использовать Task.Delay.
1
|
Администратор
![]() ![]() |
|
28.06.2018, 18:08 | |
Passerby, 1) Не совсем. Она возвращает Task который представляет операцию завершения всех задач. Соответственно на ней и нужно делать await. После этого все задачи точно будут завершены.
2) Да. Везде по цепочке вызовов нужно будет добавить async.
1
|
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
|
|
28.06.2018, 18:17 [ТС] | |
То есть WhenAll не ожидает завершения задач? Тогда чем она отличается от WhenAny? Я считал, что WhenAll ожидает завершения всех задач, переданных ей в параметры, а WhenAny - одной и только одной задачи. Это не так?
0
|
Администратор
![]() ![]() |
|
28.06.2018, 18:38 | |
Сама по себе, без ожидания, нет.
Этим и отличается. Схожи же они тем что обе возвращают Task представляющий операцию ожидания.
1
|
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
|
|
28.06.2018, 18:56 [ТС] | |
Что-то совсем запутался. Task<int> t GetOpenOrder(...) возвращает Task, представляющий операцию ожидания и WhenAll тоже возвращает Task, представляющий операцию ожидания. Чем отличаются возвраты этих функций? Я считал тем, что WhenAll возвращает только тогда, когда задача выполнена, т.е. await не нужен.
0
|
![]() 6496 / 3906 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
|
28.06.2018, 21:14 | |
Passerby,
WhenAll() создает горячую задачу, которая получит статус RanToCompleted, когда завершатся все задачи из списка в параметрах. То есть эта задача сама является задачей-продолжением (или callback-ом). Если не использовать await, то метод, который вызвал WhenAll(), продолжит работу и не узнает результат футбольного матча в WhenAll(). С await узнает. А вообще тема асинхронности большая, и надо по ней прочитать хотя бы три книги. ---------- WhenAny() достаточно подлый метод. После получения первой выполненной задачи обязательно надо вызвать WhenAll() для оставшихся задач, чтобы поймать их исключения.
1
|
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
|
|
28.06.2018, 22:23 [ТС] | |
amr-now, большое спасибо.
1. Мне казалось, что Task был еще в тех версиях шарпа, когда еще не было await. Я ошибаюсь? Если нет, то как же тогда дожидались окончания задач? 2. В других методах я использовал Task без await и это проходило. Хотя Эйнштейн и ошибался, говоря, что бог не играет в кости, но что неопределенность результата распространяется и на код как-то смущает.
0
|
![]() 6496 / 3906 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
|
28.06.2018, 22:38 | |
Passerby,
Класс Task появился в NET 4.0. Библиотека TPL казалась верхом совершенства, но быстро стало понятно, что она очень недоделанная. И быстро выпустили NET 4.5 с C#5. Последняя цифра фреймворка сейчас соответствует номеру C#. Мелкие косяки асинхронности доделывали и в NET4.6 Хорошая шпаргалка для начала об асинхронности https://msdn.microsoft.com/magazine/jj991977
2
|
28.06.2018, 22:38 | |
Помогаю со студенческими работами здесь
11
В каких случаях использовать обращение self::, а в каких $this. В чём разница между ними? В каких случаях надо создавать индексы к полям, а в каких - нет?
В каких случаях создаётся имя в кодировке utf-16 файла или папки, а в каких нет?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
|
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
|
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
|
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
|
Образование и практика
Igor3D 21.03.2025
Добрый день
А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
|
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
|
Async/await в Swift: Асинхронное программирование в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
|
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
|
PostgreSQL в Kubernetes: Подготовка кластера и настройка
Mr. Docker 20.03.2025
Когда доходит до контейнеризации баз данных и особенно таких требовательных к ресурсам системах как PostgreSQL, многие команды до сих пор колеблются, прежде чем перенести их в контейнерную. . .
|
C++26: Индексирование пакетов и метапрограммирование
bytestream 20.03.2025
Эволюция C++ продолжается стремительными темпами – каждый новый стандарт приносит функциональность, о которой мы мечтали годами. Звучит слишком громко? Если вы когда-либо боролись с вариадическими. . .
|