Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 31433|Odpověď: 5

[Zdroj] .net/c# třída úloh s async/await

[Kopírovat odkaz]
Zveřejněno 20.10.2017 22:32:17 | | |
Třída úkolů

Třída Task je asynchronní abstrakce operací poskytovaná po .NET 4.0, s plnou cestou k System.Threading.Tasks.Task.

Třída Task se používá k reprezentaci asynchronních operací bez návratové hodnoty a pro asynchronní operace s návratovými hodnotami by měla být použita podtřída Task třídy Task<TResult>.
Úlohy vytvořené třídou Task jsou přidávány do poolu vláken.

<TResult>Hlavní konstruktoři třídy Task/Task jsou následující:


Po vytvoření lze úkol spustit metodou Start():


Při skutečném vývoji se k vytváření a spuštění nových úloh častěji používá statická metoda Run() třídy Task Task nebo členská metoda StartNew() třídy TaskFactory z tovární třídy TaskFactory.

Některé běžné metody v třídě Task:


async/await klíčové slovo

C# 5.0 zavedl async a await klíčová slova, která poskytla lepší podporu souběžnosti na úrovni jazyka.

Async se používá k označení asynchronních metod:
Asynchronní klíčové slovo je kontextové klíčové slovo a bude považováno pouze za klíčové slovo při úpravě metody a Lambdy, a v jiných oblastech bude považováno za identifikátor.
Asynchronní klíčové slovo může označit statické metody, ale ne vstupní body (Main() metody).
Návratová hodnota metody označené jako async musí být <TResult>Task, Task nebo void.
await se používá k čekání na výsledek asynchronní metody:
Klíčové slovo await je rovněž kontextové klíčové slovo a je považováno za klíčové slovo pouze v asynchronní metodě tagování.
Klíčové slovo await lze použít před asynchronní metodou a Task, a <TResult>Task, pro čekání na konec asynchronního vykonávání úkolu.
Jednoduchá asynchronní struktura metody je následující:
Nejde o to, že by metoda byla označena asynchronním klíčovým slovem, ale jde o asynchronní metodu, a příkazy, které se objevují přímo uvnitř asynchronní metody, jsou také vykonávány synchronněObsah vykonávaný asynchronně musí být vykonán pomocí třídy Task
Ve skutečnosti se synchronní metoda, která neobsahuje žádné příkazy čekat, spustí synchronně, přičemž kompilátor vydá varování.

Jednoduchý příklad, použití async/await pro současné výstupy obsahu na obrazovku:

Výstup: (Mono 4.4.0 & ArchLinux x64)

Není těžké z výše uvedeného programu vidět, že v asynchronní metodě označené asynchronním klíčovým slovem je kód před použitím await vykonán synchronně a po vyvolání await běží zbývající kód asynchronně na samostatném vlákně.





Předchozí:fsadf{:1_2:}
Další:RestSharp a. NET(C#) HTTP helper class component
Zveřejněno 01.11.2017 19:57:12 |
Podívej se, podívej se, podívej se
Zveřejněno 29.01.2019 9:37:53 |
Dlouho jsem hledal na Baidu #async Task Invoke()Zjistil jsem, že stojímVýše uvedená metoda používá asynchronní klíčové slovo k vrácení metody Invoke třídy Task, která také řeší problém s vlákny, jaký má celá tato funkce význam?
Zveřejněno 29.01.2019 21:14:36 |
To je opravdu dobrá věc a napíšu takový příspěvek, až budu mít čas
Zveřejněno 15.02.2019 16:17:22 |
Výstupní výsledek nemůže jasně vidět efekt asynchronního vykonávání a asynchronní vstup by měl být současný
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com