|
|
||||||
Простейшая прогамма с async/await нуждается в доработке22.10.2015, 20:02. Показов 7196. Ответов 14
Метки нет (Все метки)
Облазил множество мануалов, всё равно не могу до конца понять как работать с async/await.
Примеры из сети обычно части больших программ, как вызвать их я не понимаю. Вот пример кода. Он естественно не работает ![]()
0
|
||||||
| 22.10.2015, 20:02 | |
|
Ответы с готовыми решениями:
14
Программа для сортировки одномерного массива нуждается в доработке Async, await |
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||
| 22.10.2015, 23:12 | ||||||
После завершения работы Main программа закрывается. А, ну и GetString измените со static void на static Task, из самого метода что-нибудь верните, вроде Task.Yield()
1
|
||||||
|
|
||||||
| 23.10.2015, 13:00 [ТС] | ||||||
|
Уже теплее, но осталась ошибка
![]()
0
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||||||||||||||||||||||
| 23.10.2015, 15:03 | |||||||||||||||||||||||||||
|
1. void. Используется, если метод будет вызываться по принципу "запустил и забыл", например если это обработчик события.
А вот метод myAwaitMeth возвращает строку, значит тип его возвращаемого значения должен быть Task<string>. И, кстати, не используйте Thread.Sleep в асинхронных методах — они могут отработать в том же потоке, откуда вызываются. Используйте вместо этого Task.Delay:
Стоит добавить, что если в асинхронном методе в свою очередь ничего не надо ожидать через await, то его не обязательно помечать как async — достаточно венуть любой Task:
1
|
|||||||||||||||||||||||||||
|
|
||||||
| 23.10.2015, 15:33 [ТС] | ||||||
|
Спасибо большое!
Запустил всё вместе, вот что получилось:
0
|
||||||
|
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|||||||
| 23.10.2015, 16:17 | |||||||
0
|
|||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 23.10.2015, 17:40 | ||
|
1
|
||
|
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|
| 23.10.2015, 23:25 | |
|
0
|
|
|
Заблокирован
|
||||||
| 23.10.2015, 23:45 | ||||||
|
мне вот самому интересно стало, допустим длинное копирование большого файла:
Добавлено через 2 минуты эти async / await они вообще как работают? они что неявно создают отдельный поток и в нем выполняют эту функцию?
0
|
||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
||||||
| 23.10.2015, 23:54 | ||||||
1
|
||||||
|
Заблокирован
|
|
| 24.10.2015, 09:10 | |
|
Someone007, кажется работает, и все таки я так и не понял как
0
|
|
|
|
||||||
| 27.10.2015, 11:41 [ТС] | ||||||
|
Всем большое спасибо за ответы!
Хотелось бы уточнить некоторые, видимо очевидные вещи, но я явной форме о которых я не смог нигде прочитать. 1. Первое, значит так, как я понимаю, вот мы по ходу кода хотим что бы задача выполнилась асинхронно. Тогда мы объявляем Task, пихаем в него какой-нибудь свой метод (лямбда-выражение или полноценный метод, без return чего либо, с Task или с Task<TResult>, не суть). Всё норм, таск выполняется в каких-то других потоках, не вешая основной, в котором был вызван (преимущественно UI, но может быть что угодно). Ключевых слов async и await тут не используется! 2. Второе. Вот мы объявляем метод async. Как сказано в примере 1 от kolorotur:
3. Ключевое слово await. Как я понял если я хочу что бы было асинхронное выполнение моего метода(ов), но хочу, что бы основной код, откуда был вызван async метод, ждал выполнения этого метода (или его сбоя, или получения cancellationToken). Т.е. распараллеливание будет, но основой поток, откуда был вызван async - будет висеть и ждать? Пока в теле async-метода не выполнится какой-нибудь statement с пометкой await. И тут ими можно будет в добавок поуправлять синхронизацией с помощью Continiouswith(), AwaitAll, AwaitAny как требует моя логика приложения. Всё так? И класс task тут опять явно не объявляется.
0
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||||||||||||||
| 27.10.2015, 12:36 | |||||||||||||||||||
|
Таск может выполниться и в текущем потоке, но когда-нибудь потом, а не прямо сейчас. А может и прямо сейчас, что по сути будет синхронным выполнением. В этом главное различие между асинхронным и параллельным выполнением: суть асинхронного выполнения в том, чтобы не блокировать текущий поток, то есть не оставлять его без дела.
Если в основном потоке имеется await, то либо асинхронное действие завершается тут же (синхронно) и метод продолжает свою работу, либо метод завершает задачу и продолжает ее, когда закончится асинхронное выполнение. Если у вас в коде есть примерно такая конструкция:
Код становится чуть сложнее, если имеются возвращаемые значения, но суть остается та же: все, что после await выносится в отдельный метод, своего рода в обработчик события окончания асинхронной задачи. Еще раз заостряю внимание на том, что неизвестно, в каком потоке будет выполнен метод DoSomething и ContinuationCallback: может быть в другом параллельно, а может быть в текущем когда-нибудь потом или прямо сейчас. Из-за этого лучше не мешайте вместе асинхронные методы и блокирующие операции — очень быстро можете схлопотать дедлок.
0
|
|||||||||||||||||||
|
|
||||||||||||
| 20.11.2015, 13:56 [ТС] | ||||||||||||
|
А вот пример из учебника Nagel C., Glynn J., Skinner M. - Professional C# 5.0 and .NET 4.5.1 (Programmer to Programmer), абзац Futures—Results from Tasks
When a task is finished, it can write some stateful information to a shared object. Such a shared object must be thread-safe. Another option is to use a task that returns a result. Such a task is also known as future as it returns a result in the future. With early versions of the Task Parallel Library (TPL), the class had the name Future as well. Now it is a generic version of the Task class. With this class it is possible to define the type of the result that is returned with a task. A method that is invoked by a task to return a result can be declared with any return type. The following example method TaskWithResult returns two int values with the help of a Tuple. The input of the method can be void or of type object, as shown here (code file TaskSamples/Program.cs):
generic parameter defines the return type. With the constructor, the method is passed to the Func delegate, and the second parameter defines the input value. Because this task needs two input values in the object parameter, a tuple is created as well. Next, the task is started. The Result property of the Task instance t1 blocks and waits until the task is completed. Upon task completion, the Result property contains the result from the task:
Зачем тогда строчка №5 t1.Wait(); во втором участке кода? Ведь как написал выше kolorotur
0
|
||||||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 20.11.2015, 14:08 | |
|
1
|
|
| 20.11.2015, 14:08 | |
|
Помогаю со студенческими работами здесь
15
Async await
Async/await async/await (._. ) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|