-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242

В каких случаях Result после WhellAll может быть не вычислен?

28.06.2018, 17:48. Показов 768. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Непонятна ошибка, см. рисунок.
Почему после WhenAll Result оказывается не вычислен? Переменная i=1.
Миниатюры
В каких случаях Result после WhellAll может быть не вычислен?   В каких случаях Result после WhellAll может быть не вычислен?  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.06.2018, 17:48
Ответы с готовыми решениями:

В каких случаях может быть полезно присваивать полю GenerateMember значение false?
Открывая любой элемент в Visual Studio, в свойствах можно найти данное поле GenerateMember (значения только true / false). В каких...

Составить программу вычисления корня. Учесть случаи, когда корень не может быть вычислен
Составить программу вычисления корня \sqrt{4x-6}. Учесть случаи, когда корень не может быть вычислен.

В каких случаях банк может потребовать объяснения появления денег?
Вот допустим Человек открыл счет в банке. Периодически пополняет он свой счет через карточку банковскую. Деньги получает на...

10
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
28.06.2018, 17:58  [ТС]
Ошибка не случайна, а появляется всякий раз при запуске программы во время второго вызова функции GetMyOpenOrders.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17881 / 13979 / 5341
Регистрация: 17.03.2014
Сообщений: 28,633
Записей в блоге: 1
28.06.2018, 17:59
Passerby, Task.WhenAll нужно await-ить. И раз тут await-ы, то вместо Thread.Sleep лучше использовать Task.Delay.
1
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
28.06.2018, 18:06  [ТС]
1. Зачем эвейтить WhenAll? Разве WhenAll не дожидается окончания задачи?
2. Если применить Task.Delay, функцию надо будет делать асинхронной, чтобы вызывающая функция дождалась окончания GetMyOpenOrders?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17881 / 13979 / 5341
Регистрация: 17.03.2014
Сообщений: 28,633
Записей в блоге: 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  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Она возвращает Task который представляет операцию завершения всех задач.
То есть WhenAll не ожидает завершения задач? Тогда чем она отличается от WhenAny? Я считал, что WhenAll ожидает завершения всех задач, переданных ей в параметры, а WhenAny - одной и только одной задачи. Это не так?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17881 / 13979 / 5341
Регистрация: 17.03.2014
Сообщений: 28,633
Записей в блоге: 1
28.06.2018, 18:38
Цитата Сообщение от Passerby Посмотреть сообщение
То есть WhenAll не ожидает завершения задач?
Сама по себе, без ожидания, нет.

Цитата Сообщение от Passerby Посмотреть сообщение
Тогда чем она отличается от WhenAny? Я считал, что WhenAll ожидает завершения всех задач, переданных ей в параметры, а WhenAny - одной и только одной задачи.
Этим и отличается. Схожи же они тем что обе возвращают Task представляющий операцию ожидания.
1
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
28.06.2018, 18:56  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Схожи же они тем что обе возвращают Task представляющий операцию ожидания.
Что-то совсем запутался. Task<int> t GetOpenOrder(...) возвращает Task, представляющий операцию ожидания и WhenAll тоже возвращает Task, представляющий операцию ожидания. Чем отличаются возвраты этих функций? Я считал тем, что WhenAll возвращает только тогда, когда задача выполнена, т.е. await не нужен.
0
Эксперт JS
6496 / 3906 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
28.06.2018, 21:14
Passerby,
WhenAll() создает горячую задачу, которая получит статус RanToCompleted, когда завершатся все задачи из списка в параметрах.
То есть эта задача сама является задачей-продолжением (или callback-ом).


Если не использовать await, то метод, который вызвал WhenAll(), продолжит работу и не узнает результат футбольного матча в WhenAll().

С await узнает.

А вообще тема асинхронности большая, и надо по ней прочитать хотя бы три книги.

----------
Цитата Сообщение от Passerby Посмотреть сообщение
WhenAll ожидает завершения всех задач, переданных ей в параметры, а WhenAny - одной и только одной задачи.
WhenAny() достаточно подлый метод. После получения первой выполненной задачи обязательно надо вызвать WhenAll() для оставшихся задач, чтобы поймать их исключения.
1
-7 / 3 / 1
Регистрация: 22.09.2017
Сообщений: 242
28.06.2018, 22:23  [ТС]
amr-now, большое спасибо.
1. Мне казалось, что Task был еще в тех версиях шарпа, когда еще не было await. Я ошибаюсь? Если нет, то как же тогда дожидались окончания задач?
2. В других методах я использовал Task без await и это проходило. Хотя Эйнштейн и ошибался, говоря, что бог не играет в кости, но что неопределенность результата распространяется и на код как-то смущает.
0
Эксперт JS
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.06.2018, 22:38
Помогаю со студенческими работами здесь

В каких случаях использовать обращение self::, а в каких $this. В чём разница между ними?
Привет! Сейчас пишу регистрацию в стиле ооп. Пишу функцию __construct в классе Registration class Registration{ protected $Name; ...

В каких случаях надо создавать индексы к полям, а в каких - нет?
Не могу понять, в каком случае надо создовать индексы к полям а вкаких нет. если надо, то в каком случае индекс надо создать для каждого...

В каких случаях нужно создавать динамические переменные, а в каких статические?
такой же вопрос и по массивам ! Объясните пожалуйста !

В каких случаях создаётся имя в кодировке utf-16 файла или папки, а в каких нет?
Друзья! Вынужден ковыряться со сторонними файлами, где без кодировки utf-16 не обойтись, век бы её не знал. Хотелось бы выяснить принцип...

Объясните в каких случаях используеться char, а в каких string?
Зачем(в каких случаях) использовать char, и char *... Зачем(в каких случаях) использовать string...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
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++ продолжается стремительными темпами – каждый новый стандарт приносит функциональность, о которой мы мечтали годами. Звучит слишком громко? Если вы когда-либо боролись с вариадическими. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru