Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 31433|Atbildi: 5

[Avots] .net/c# Uzdevumu klase ar asinhronu / gaidīt

[Kopēt saiti]
Publicēts 20.10.2017 22:32:17 | | |
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ī sinhroniSaturs, 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ā.





Iepriekšējo:fsadf{:1_2:}
Nākamo:RestSharp a. NET(C#) HTTP palīga klases komponents
Publicēts 01.11.2017 19:57:12 |
Paskatieties, paskatieties, paskatieties
Publicēts 29.01.2019 09:37:53 |
Es ilgi meklēju Baidu #asinhrona uzdevuma izsaukšana()Es atklāju, ka stāvuIepriekš minētā metode izmanto asinhronu atslēgvārdu, lai atgrieztu Task klases Invoke metodi, kas arī atrisina pavediena problēmu, kāda ir šīs funkcijas nozīme?
Publicēts 29.01.2019 21:14:36 |
Tas ir patiešām labi, un es uzrakstīšu šādu dalīšanos, kad man būs laiks
Publicēts 15.02.2019 16:17:22 |
Izejas rezultāts nevar skaidri redzēt asinhronās izpildes efektu, un asinhronajai ievadei jābūt vienlaicīgai
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com