Začínáme s asynchronním programováním

Dokončeno

Vývojáři používají asynchronní programovací techniky, aby se vyhnuli kritickým bodům výkonu a zvýšili celkovou odezvu svých aplikací. Tradiční techniky pro psaní asynchronních aplikací ale můžou být složité, takže je obtížné psát, ladit a udržovat.

Jazyk C# podporuje zjednodušený asynchronní programovací přístup, který využívá asynchronní podporu v modulu runtime .NET. Kompilátor dělá obtížnou práci, kterou vývojář použil, a vaše aplikace uchovává logickou strukturu, která se podobá synchronnímu kódu. V důsledku toho získáte všechny výhody asynchronního programování s zlomkem úsilí.

Pochopení toho, jak asynchronní procesy fungují v reálném světě, vám můžou pomoct pochopit, jak ve svých aplikacích používat asynchronní programování.

Prozkoumání asynchronního procesu v reálném světě

Vytvoření snídaně je dobrým příkladem procesu, který je přínosem při asynchronním provádění úkolů. Snídani si můžete představit jako řadu úkolů, které je možné provádět synchronně nebo asynchronně.

  1. Vezměte ingredience na snídani ze spíže.
  2. Nalít šálek kávy.
  3. Rozpalte pánev a pak smažte tři plátky slaniny.
  4. Smažte dvě vejce.
  5. Opečte dva plátky chleba.
  6. Rozložte máslo a džem na toast.
  7. Nalít sklenici pomerančové šťávy.

Pokud máte zkušenosti s vařením, můžete tyto pokyny dokončit asynchronně. Začnete zahřívat pánev na slaninu a vejce a pak dostanete přísady ze spíže. Dáme chleba do toustovače a pak začnete vařit slaninu. V každém kroku procesu spustíte úkol a pak přejdete na jiné úkoly, které jsou připravené pro vaši pozornost.

Vaření snídaně je dobrým příkladem asynchronní práce, která není paralelní. Jedna osoba (nebo vlákno) může zpracovávat všechny úkoly. Jedna osoba může snídani asynchronně provést spuštěním dalšího úkolu před dokončením předchozího úkolu. Každý úkol vaření postupuje bez ohledu na to, jestli někdo aktivně sleduje proces. Jakmile začnete ohřívat pánev, můžete si vzít přísady ze spíže. Poté, co slanina začne vařit, můžete dát chléb do toustovače.

Pro paralelní algoritmus potřebujete více lidí, kteří uvaří (nebo více vláken). Jedna osoba uvaří vejce, další osmaží slaninu a tak dále. Každá osoba se zaměřuje na svůj konkrétní úkol. Každá osoba, která vaří (nebo každý vlákno), je synchronně blokována při čekání na dokončení aktuálního úkolu: slanina je připravena k otočení, chléb se chystá vyskočit z toustovače a tak dále.

Pomocí asynchronních programovacích technik můžete zlepšit efektivitu a rychlost odezvy aplikace stejně jako to, jak můžete zvýšit efektivitu snídaně provedením více úloh najednou.

Asynchronní funkce zlepšuje rychlost odezvy.

Asynchronní synchronizace je nezbytná pro aktivity, které mohou blokovat, například webový přístup. Přístup k webovému prostředku je někdy pomalý nebo zpožděný. Pokud je taková aktivita zablokovaná v synchronním procesu, musí celá aplikace počkat. V asynchronním procesu může aplikace pokračovat v jiné práci, která nezávisí na webovém prostředku, dokud se potenciálně blokující úloha nedokončí.

Následující tabulka uvádí typické oblasti, ve kterých asynchronní programování zlepšuje rychlost odezvy. Uvedená rozhraní API z .NET a prostředí Windows Runtime obsahují metody, které podporují asynchronní programování.

Oblast aplikace Typy .NET s asynchronními metodami Typy prostředí Windows Runtime s asynchronními metodami
Webový přístup HttpClient Windows.Web.Http.HttpClient, SyndicationClient
Práce se soubory JsonSerializer, StreamReader, StreamWriter atd. Soubor úložiště
Práce s obrázky MediaCapture, BitmapEncoder, BitmapDecoder
Programování WCF Synchronní a asynchronní operace

Vytvoření a volání asynchronních metod

V jazyce C# jsou asynchronní operace implementovány pomocí klíčových slov async a await. Klíčové async slovo se používá k definování asynchronní metody, zatímco await klíčové slovo se používá k volání asynchronní metody a čekání na výsledek bez blokování volajícího vlákna. Asynchronní operace se obvykle implementují pomocí Task nebo Task<T> typů, které představují probíhající operaci, kterou lze očekávat.

Tady je příklad vytvoření a volání asynchronní úlohy v jazyce C#:


using System;
using System.IO;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main()
    {
        string filePath = "example.txt";
        string content = await ReadFileAsync(filePath);
        Console.WriteLine(content);
    }

    public static async Task<string> ReadFileAsync(string filePath)
    {
        using (StreamReader reader = new StreamReader(filePath))
        {
            string content = await reader.ReadToEndAsync();
            return content;
        }
    }
}

V tomto příkladu je metoda ReadFileAsync definována pomocí klíčového slova async a má návratový typ Task<string>. Klíčové async slovo označuje, že metoda obsahuje asynchronní operace a návratový Task<string> typ indikuje, že metoda vrací úlohu, která představuje asynchronní operaci. Typ Task<string> je obecný úkol, který představuje asynchronní operaci, která vrací řetězcovou hodnotu. Metoda ReadFileAsync přebírá cestu k souboru jako parametr a načte obsah souboru asynchronně.

Metoda Main je také definována jako asynchronní, což jí umožňuje volat metodu ReadFileAsync pomocí klíčového await slova. Klíčové await slovo se používá k označení, že program by měl před pokračováním počkat na výsledek asynchronní operace. V tomto případě program čeká na přečtení souboru před tiskem jeho obsahu do konzoly.

Shrnutí

V této lekci jste se dozvěděli o výhodách asynchronního programování a o tom, jak může zlepšit rychlost odezvy vašich aplikací. Také jste se naučili, jak vytvářet a volat asynchronní metody pomocí klíčových slov async a await v jazyce C#. Pomocí těchto technik můžete psát efektivnější a responzivní aplikace, které mohou zpracovávat potenciálně blokující operace bez zablokování uživatelského rozhraní nebo blokování jiných úloh.

Klíčové body

  • Asynchronní programování zlepšuje výkon a rychlost odezvy aplikací.
  • Jazyk C# poskytuje zjednodušený přístup k asynchronnímu programování.
  • Asynchronní programování je užitečné v potenciálně blokujících aktivitách, jako je webový přístup.
  • V jazyce C# se vytvářejí asynchronní metody pomocí klíčového async slova a volají se pomocí klíčového await slova.
  • Typy Task a Task<T> představují probíhající operace, na které lze čekat v jazyce C#.