Uzdevumu klase
Uzdevumu klase ir asinhrona operāciju abstrakcija, kas tiek nodrošināta pēc .NET 4.0, ar pilnu ceļu uz System.Threading.Tasks.Task.
Uzdevumu klase tiek izmantota, lai attēlotu asinhronas operācijas bez atgrieztās vērtības, un asinhronām operācijām ar atgrieztajām vērtībām jāizmanto Uzdevumu klases apakšklase Uzdevums<TResult>. Uzdevumu klases izveidotie uzdevumi tiek pievienoti pavedienu pūlam.
<TResult>Uzdevumi/uzdevumu klases galvenie konstruktori ir šādi:
Pēc izveidošanas uzdevumu var sākt, izmantojot Start() metodi:
Faktiskajā izstrādē jaunu uzdevumu izveidei un sākšanai biežāk tiek izmantota uzdevumu klases statiskā metode Run() vai rūpnīcas klases TaskFactory dalībnieka metode StartNew().
Dažas izplatītākās metodes uzdevumu klasē:
Atslēgvārds asinhrons/gaidīt
C# 5.0 ieviesa asinhronos un gaidīt atslēgvārdus, kas sniedza labāku atbalstu vienlaicīgumam valodas līmenī.
Async tiek izmantots, lai atzīmētu asinhronās metodes: Asinhronais atslēgvārds ir kontekstuāls atslēgvārds, un tas tiks uzskatīts tikai par atslēgvārdu, modificējot metodi un Lambda, un tiks uzskatīts par identifikatoru citās jomās. Asinhronais atslēgvārds var atzīmēt statiskās metodes, bet ne ieejas punktus (Main() metodes).
Ar asinhronu atzīmētās metodes atgrieztajai vērtībai ir jābūt <TResult>tādai no Uzdevums, Uzdevums vai Void. Await tiek izmantots, lai gaidītu asinhronās metodes rezultātu:
Atslēgvārds await ir arī kontekstuāls atslēgvārds, un tas tiek uzskatīts tikai par atslēgvārdu asinhronā tagu metodē. Atslēgvārdu await var izmantot pirms asinhronās metodes un Uzdevums un <TResult>Uzdevums, lai gaidītu asinhronā uzdevuma izpildes beigas. Vienkārša asinhronās metodes struktūra ir šāda:
Nav tā, ka metode ir apzīmēta ar asinhronu atslēgvārdu, tā ir asinhrona metode, un paziņojumi, kas parādās tieši asinhronās metodes iekšpusē, tiek izpildīti arī sinhroni,Saturs, kas izpildīts asinhroni, ir jāizpilda, izmantojot klasi Task。 Faktiski asinhrona metode, kas nesatur nekādus gaidīšanas paziņojumus, tiks izpildīta sinhroni, un tajā brīdī kompilators sniegs brīdinājumu.
Vienkāršs piemērs, izmantojot asinhronu / gaidīt, lai vienlaicīgi izvadītu saturu ekrānā:
Izeja: (Mono 4.4.0 && ArchLinux x64)
No iepriekš minētās programmas nav grūti redzēt, ka asinhronajā atslēgvārdā ar asinhronu metodi kods pirms await lietošanas tiek izpildīts sinhroni, un pēc gaidīšanas izsaukšanas atlikušais kods darbojas asinhroni atsevišķā pavedienā.
|