Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/26: Рейтинг темы: голосов - 26, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 40

Какие достоинства у async и await?

07.03.2016, 15:25. Показов 5624. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь разобраться с данными ключевыми словами и уже голова идет кругом
Посмотрел и видео много, и статей, но все равно не совсем ясно. Я понял, что это все разворачивается в автогенерируемый код с асинкстейт машиной, но зачем нам все это? Ведь это не упрощение никакое, о чем твердят в различных ресурсах, а наоборот..

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
static void Main()
{
    MyClass my = new MyClass();            
    my.OperationAsync();
    my.Operation();
 
    Console.ReadKey();
}
 
class MyClass
{
    public void Operation()
    {
        Console.WriteLine("Start ID: " + Thread.CurrentThread.ManagedThreadId);
        Thread.Sleep(5000);
        Console.WriteLine("End ID: " + Thread.CurrentThread.ManagedThreadId);
    }
 
    public async void OperationAsync()
    {
        Task task = new Task(Operation);
        task.Start();
        await task;
    }
}


Да, метод OperationAsync теперь запускается асинхронно, но без async и await он бы тоже асинхронно запустился бы. Или нет?

И с возвращаемыми значениями все удобно работает.

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void Main()
{
    Console.WriteLine("2 + 5 = " + SumAsync(2, 5)); 
    Console.ReadKey();
}
static int SumAsync(int a, int b)
{
    Task<int> task = Task.Factory.StartNew(Sum, new AB() { A = a, B = b });
    return task.Result;            
}
static int Sum(object abO)
{
    AB ab = (AB)abO;
    Thread.Sleep(2000);
    return ab.A + ab.B;
}
struct AB
{
    public int A { get; set; }
    public int B { get; set; }
}


Если не сложно, пожалуйста, пару простых(чем проще, тем лучше) примеров где реально нужны эти async await, и где реально они упрощают нам жизнь. А то все говорят: "О наконец! Теперь без особых проблем элементарно можно создавать асинхронные методы, не то что раньше". Но по факту все равно все работает через таски.. Хочется тоже разделить радость с людьми
Заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2016, 15:25
Ответы с готовыми решениями:

Async/ await как правильно ввести данные в async метод (консоль)
Привет , кто то может помочь ?) проблема в тому что у меня есть async метод который запускается из Main, по среди этого метода...

async/await (._. )
Опять я с глупым вопросом. Не могу понять, почему метод, который выгружает данные не асинхронный? Вообще форма зависает на неопределенное...

Async/await
В интернете копался ничего информативного не нашел, все в каких- то не понятных для новичка терминах, объясните пожалуйста смысл...

22
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.03.2016, 18:21
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Penelent Посмотреть сообщение
ты же сам себе противоречишь!
Слово "может" вы опять не заметили?
Плюс из фразы "выполняется в отдельном потоке или не выполняется вообще" вовсе не следует, что когда метод будет все-таки выполняться, то выполняться он будет именно в отдельном потоке. Может выполниться и в том, который инициировал асинхронную операцию. Зависит от реализации метода.

Цитата Сообщение от Penelent Посмотреть сообщение
не представляю какими функциями (системными) можно "выгнать" на время бездействующий поток
Поток занят до тех пор, пока отрабатывает метод. Как метод закончил работу — поток свободен для другого метода.
Если у вас в методе код можно логически разделить на несколько частей вида "что-то делаем" и "ждем", то метод можно разбить на несколько более мелких по ключевой фразе "ждем". В итоге рабочий поток занят выполнением только частей "что-то делаем", а частями "ждем" занимаются другие компоненты рантайма, такие как, например, IO Completion Ports.

Опять же, посмотрите как реализована, например, асинхронная работа с классом Socket через методы BeginSend/EndSend, BeginReceive/EndReceive — там вы пишете только ту часть кода, которая относится к "что-то делаем", а часть "ждем" происходит за кадром и не загружает потоки.
Для практики и лучшего понимания попробуйте реализовать простейший чятик на сокетах, используя эти старые методы.
async/await — это упрощение именно той структуры, чтобы логически последовательная задача с возможными паузами выглядела в коде как один метод, а не была разбита на несколько мелких. Но при этом чтобы возможные паузы выполнялись "за кадром".
0
Заблокирован
08.03.2016, 18:29
Цитата Сообщение от kolorotur Посмотреть сообщение
реализовать простейший чятик на сокетах

Не по теме:

и как вы догадались я же его и делаю :D

0
08.03.2016, 18:32

Не по теме:

Цитата Сообщение от Penelent Посмотреть сообщение
и как вы догадались
Ну это же "hello world" для сетей :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.03.2016, 18:32
Помогаю со студенческими работами здесь

async/await
https://metanit.com/sharp/tutorial/13.7.php вот код Task&lt;T&gt;: // определение асинхронного метода static async...

Async await
Пытыюсь разобраться с async/await но что то без успешно пока. Не подскажете как переделать этот код на примере проще освоить public...

Работа с async await
Добрый вечер. Помогите исправить код. Мне нужно сделать поиск по реестру, например ввожу слово Console, программа должна получить все имена...

Проблемы с async и await
Добрый день. Помогите разобраться c api, для начала вот код Метод класса: async public Task&lt;bool&gt; Auth() ...

Async await + zeromq
Добрый день, уважаемые гуру. Помогите разобраться с проблемой уже несколько недель бьюсь. Имеется клиент-сервер на zeromq Клиент: ...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru