|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttКонтролируется на этапе сборки.тоже помню где то ругалась. Счас проверил - f2, переименовать - не ругается) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 13:12 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
LRConfigureAwait(false) лишь отменяет требование выполнять продолжение в первоначальном контексте, т.е., дает "добро" на любой контекст, в т.ч. не исключая первоначальный. В данном примере, вероятно, async-инфраструктуре "влом" идти и брать свободный поток из пула, и выбирается то, что "под боком" - а это (уже блокированный ожиданием .Result) UI-поток. Или все происходит как-то по другому? Может кто-нибудь проверить этот пример у себя? https://stackoverflow.com/questions/18524609/configureawaitfalse-still-deadlocks Меняем на HttpClient и проблема исчезает. Вообще, от WebCliet надо уже дааааааавным давно уже было отказаться везде где только можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 13:17 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttНет, не забили. Все асинхронные методы имеют суффикс Async.И даже методы контроллера? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 13:18 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Shocker.ProhVosttНет, не забили. Все асинхронные методы имеют суффикс Async.И даже методы контроллера? Нет, это исключение из правила :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 13:18 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVostt https://stackoverflow.com/questions/18524609/configureawaitfalse-still-deadlocks Меняем на HttpClient и проблема исчезает. Вообще, от WebCliet надо уже дааааааавным давно уже было отказаться везде где только можно. Ага, понятно, спасибо! Получается, что панацеи от дедлока при синхронном вызове "какого либо" асинхронного метода не существует... Переделывать синхронные методы в асинхронные, чтобы безопасно вызывать "любые" асинхронные, тоже не всегда возможно (out-параметры и т.п.). В общем, асинхронность "кусается")) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 13:51 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
LRАга, понятно, спасибо! Получается, что панацеи от дедлока при синхронном вызове "какого либо" асинхронного метода не существует... Переделывать синхронные методы в асинхронные, чтобы безопасно вызывать "любые" асинхронные, тоже не всегда возможно (out-параметры и т.п.). В общем, асинхронность "кусается")) Почему? Можно, но делать надо это правильно :) Вот небольшой пример с описанием http://andrey.moveax.ru/post/csharp-sync-to-async ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 13:57 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttПочему? Можно, но делать надо это правильно :) Вот небольшой пример с описанием http://andrey.moveax.ru/post/csharp-sync-to-async Пример хороший, но несколько о другом. Речь о том, как безопасно вызывать "какой либо" асинхронный метод. Из async-метода это сделать легко - используя await. Из синхронного - сложнее, зависит от... Но, например, как в примере с дедлоком, этот синхронный метод (обработчик нажатия кнопки) легко превратить в асинхронный (дописать async) - и в нем задействовать await. Но такое легкое "превращение" не всегда возможно, в частности, если у метода есть out-параметры. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 14:24 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
LRПример хороший, но несколько о другом. Речь о том, как безопасно вызывать "какой либо" асинхронный метод. Из async-метода это сделать легко - используя await. Из синхронного - сложнее, зависит от... Но, например, как в примере с дедлоком, этот синхронный метод (обработчик нажатия кнопки) легко превратить в асинхронный (дописать async) - и в нем задействовать await. Но такое легкое "превращение" не всегда возможно, в частности, если у метода есть out-параметры. К сожалению, никак :( Поэтому, 1. избегать возможности дедлока, не делать Wait и не обращаться к Result у Task 2. если нужно асинхронную задачу запустить синхронно, например, так https://msdn.microsoft.com/en-us/library/dd321435(v=vs.110).aspx 3. ну и ConfigureAwait в библиотеках, традиционно ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 15:44 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
LRесли у метода есть out-параметры Запаковывать в OperationResult, как уже обсуждалось тут ранее )) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 15:45 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttLRесли у метода есть out-параметры Запаковывать в OperationResult, как уже обсуждалось тут ранее )) Не надо делать синхронный код асинхронным автоматически или волшебством дописав async. Если у вас out или у меня стек вызовов до 5го колена, то ничего не выйдет. Логику и методы надо будет переписать. Не заворачивая out в result, а полностью избавится от них. Как в java). Асинхронный код и сам программист не равен синхронному)). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 16:03 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Petro123Не надо делать синхронный код асинхронным автоматически или волшебством дописав async. Обычно это нужно, когда асинхронные интерфейсы и синхронный код, который надо подсунуть через адаптер. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 16:30 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttОбычно это нужно, когда асинхронные интерфейсы и синхронный код, который надо подсунуть через адаптер.сложно понять постановку в одно предложение. Но вероятно что все методы уже готовы для асинхрооности)). Out,ref нету. Общения с ГУИ нету. Они без вложенности и слабозависимы от результатов.. Тогда можно и async first). Это твой термин? У меня в десктопе, кстати, не так много мест где нужна асинхронность. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 16:50 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Petro123, Всё, что потенциально работает с данными, асинхронное. Также, запросы API, работа с файлами, тоже асинхронное. В десткопе это тоже имеет смысл, но десктоп не сильно страдает от использования потоков для получения асинхронного поведения. Хотя зависит от объёма функционала и нагрузки. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2018, 10:02 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVostt, Вот смотри. Есть же другие способы в IT добится цели. В веб это контейнер или конвейер запросов. На каждый запрос конейнер выделяет новый поток. В десктопе есть ОРМ, кэш, СУБД которые делают время отклика 0,1 сек. Поэтому асинхронность методом await нужна там где нужна и в строке где поставил программист. Согласись, что бездумно пихать асинхронность например на чтение конфига нафиг нужно. Профи используют к месту и с умом). На то они и профи. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2018, 10:22 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVostt, Поэтому я не поддерживаю сабж чтобы убрать оператор) и асинхронность first. Imho. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2018, 10:25 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Petro123Согласись, что бездумно пихать асинхронность например на чтение конфига нафиг нужно. Если программа не может стартануть без конфига, то синхронное чтение абсолютно уместно. В ином случае, асинхронный доступ лучше, так как IO операции не детерменированы по времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2018, 10:27 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttЕсли программа не может стартануть без конфига, то синхронное чтение абсолютно уместноне понял как первое со вторым связано. Первое решается тремя способами: - конфиг это project - properties - settings - руками.....после InitializeComponent() создать если надо default конфиг - в коде учитывай что его нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2018, 12:11 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttасинхронный доступ лучше, так как IO операции не детерменированы по времени. Ты по проще для народа выражайся). Я выше писал, то профи держит под контролем IO операции. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2018, 12:14 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttДумаю многие сталкивались с ключевым словом await в языках, применяющих async/await паттерн для асинхронного программирования. Основное ограничение, это использование только в async-функциях, это понятно. Вопрос такой. Почему бы вообще не отказаться от этого ключевого слова и необходимости его употребления, ведь компилятор может определить наличие вызова асинхронного метода и сам выполнить его асинхронно? Понятно, что наличие ключевого слова await позволяет, допустим, собрать все вызовы в коллекцию и эвейтить её, или даже вообще не эвейтить, а выполнить без ожидания, или вернуть awaitable результат (Task, promise, etc.), но для подобного, более редкого, употребления можно было сделать специальный синтаксис. await это синтаксический сахар, тригерящий компилятор на создание стейт-машины. Вы предлагаете его убрать, чтобы компилятор автоматически распознавал, что метод возвращает Task, и в этом случае создавал стейт-машину ? Но как тогда быть, если мы хотим использовать не await а простой wait - например в консольном приложении ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 18:02 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttЕвгенийВА что в GO такого легкого и простого? Ужасные горутины и каналы? Просто мерзкая обработка ошибок? И никакого ГУЯ! почему ужасные? сравнивать напрямую нельзя конечно, так как другая парадигма. кстати, в .NET тоже будут каналы, скоро. пока в глубокой бете. точнее даже не в бете а в альфе вообще 0.1.0-alpha-001 :) https://www.nuget.org/packages/System.Threading.Tasks.Channels ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 18:08 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
WaspNewCore, В консольном не надо асинхронность (шутка) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 18:45 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Petro123, Чисто консольные приложения мне не приходится писать. Но вот WinService который может запускаться в консольном режиме - для разработки и отладки - да. Вот там и получается асинхронность. Но все сводится к простому ServiceImpl.Run().Wait(). Но я просто для примера привел консольное приложение. Что предложение отказаться от старого TPL и сделать все методы с Task'ами вызываемыми с await по умолчанию, не очень наверное правильная. Думаю есть какие-то ситуации, когда осмысленно не задействовать async/await. тут вроде что-то похожее обсуждалось https://stackoverflow.com/a/24298425 со ссылками на эти статьи https://blogs.msdn.microsoft.com/pfxteam/2012/04/13/should-i-expose-synchronous-wrappers-for-asynchronous-methods/ https://blogs.msdn.microsoft.com/pfxteam/2012/03/24/should-i-expose-asynchronous-wrappers-for-synchronous-methods/ или я сейчас ошибаюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 19:11 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
WaspNewCoreДумаю есть какие-то ситуации, когда осмысленно не задействовать async/await.я тоже против "автомата" в данном случае. Если бы все поддержали то и 10 страниц бы не было. Мне лично хотя бы для читабельности кода нужен оператор. Imho ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 19:18 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Просто у автора темы много работы связанной с асинхронным выполнением :) у многих таких проблем нет. Это как с пропами, когда много работаешь с UI и моделями, немного раздражает эта писанина, даже с учётом сниппетов. всегда есть вещи, которые хотелось бы сделать проще. Сахара мало не бывает. Но нужно относиться к этому проще, лет 10 назад, всё это было куда большим гемороем ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 19:40 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
WaspNewCoreawait это синтаксический сахар, тригерящий компилятор на создание стейт-машины. Вы предлагаете его убрать, чтобы компилятор автоматически распознавал, что метод возвращает Task, и в этом случае создавал стейт-машину ? Но как тогда быть, если мы хотим использовать не await а простой wait - например в консольном приложении ? Легко. Метод помечен ключевым словом async. Этого достаточно в абсолютном большинстве случаев. И зачем в асинхронном заведомо методе "простой wait"? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 19:50 |
|
|
start [/forum/topic.php?fid=20&msg=39685508&tid=1399271]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
143ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
others: | 288ms |
total: | 550ms |
0 / 0 |