Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 31433|Отговор: 5

[Източник] .net/c# Клас задачи с async/await

[Копирай линк]
Публикувано в 20.10.2017 г. 22:32:17 ч. | | |
Задачен клас

Класът Task е асинхронна абстракция на операции, предоставена след .NET 4.0, с пълния път към System.Threading.Tasks.Task.

Класът Задача се използва за представяне на асинхронни операции без връщаща стойност, а за асинхронни операции с връщани стойности трябва да се използва подкласът Задача на класа Задача<TResult>.
Задачите, създадени от класа Задача, се добавят към пула от нишки.

<TResult>Основните конструктори на класа Задача/Задача са следните:


След като е създадена, задачата може да се стартира чрез метода Start():


В реалната разработка статичният метод Run() от класа Task или членовият метод StartNew() от класа TaskFactory по-често се използват за създаване и стартиране на нови задачи.

Някои често използвани методи в класа Задача:


async/await ключова дума

C# 5.0 въведе ключовите думи async и await, които осигуриха по-добра подкрепа за конкурентност на езиково ниво.

Async се използва за маркиране на асинхронни методи:
Асинхронната ключова дума е контекстуална ключова дума и ще се третира като ключова дума само при модифициране на метод и Lambda, а в други области ще се третира като идентификатор.
Асинхронната ключова дума може да маркира статични методи, но не и входни точки (Main() методи).
Връщаната стойност на метода, маркиран с async, трябва да е <TResult>една на Задача, Задача или void.
Await се използва за изчакване на резултата от асинхронния метод:
Ключовата дума await също е контекстуална ключова дума и се счита за ключова дума само в асинхронно тагирания метод.
Ключовата дума await може да се използва преди асинхронния метод и Task, и <TResult>Task, за да изчакат края на изпълнението на асинхронната задача.
Проста асинхронна методна структура е следната:
Не е въпросът, че методът е маркиран с асинхронната ключова дума, а асинхронен метод, а операторите, които се появяват директно в асинхронния метод, също се изпълняват синхронноСъдържанието, изпълнявано асинхронно, трябва да се изпълнява чрез класа Task
Всъщност, асинхронен метод, който не съдържа изказвания за очакване, ще се изпълнява синхронно, след което компилаторът ще даде предупреждение.

Прост пример, използване на async/await за едновременно извеждане на съдържание на екрана:

Изход: (Mono 4.4.0 и ArchLinux x64)

Не е трудно да се види от горната програма, че при асинхронния метод с таг с ключова дума кодът преди използване на await се изпълнява синхронно, а след като waitit бъде извикан, останалият код се изпълнява асинхронно в отделна нишка.





Предишен:fsadf{:1_2:}
Следващ:RestSharp a. NET(C#) HTTP помощен клас компонент
Публикувано в 1.11.2017 г. 19:57:12 ч. |
Погледни, погледни, погледни
Публикувано в 29.01.2019 г. 9:37:53 ч. |
Търсих дълго време в Baidu #async Task Invoke()Озовах се изправенГорният метод използва асинхронната ключова дума, за да върне метод Invoke от класа Задача, което също решава проблема с нишките – какво означава цялата тази функция?
Публикувано в 29.01.2019 г. 21:14:36 ч. |
Това наистина е хубаво нещо и ще напиша такова споделяне, когато имам време
Публикувано в 15.02.2019 г. 16:17:22 ч. |
Изходният резултат не може ясно да види ефекта от асинхронното изпълнение, а асинхронният вход трябва да е едновременно
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com