Asynchroniczne (C# odniesienia)

async Modyfikator wskazuje, że metoda, Wyrażenie lambda, lub metody anonimowej on modyfikuje jest asynchroniczna.Metody te są określane jako metody komunikacji asynchronicznej.

Metoda async zapewnia wygodny sposób do potencjalnie długotrwałe pracy bez blokowania wątku wywołującego.Obiekt wywołujący metodę komunikacji asynchronicznej można wznowić swojej pracy, bez oczekiwania na metody asynchronicznej do końca.

[!UWAGA]

async i await słowa kluczowe zostały wprowadzone w Visual Studio 2012.Aby uzyskać informacje na temat innych nowych funkcji w tej wersji, zobacz Co nowego w Visual Studio 2012.

Wprowadzenie do programowania asynchronicznych, zobacz Asynchroniczne programowania przy użyciu asynchronicznej i poczekać (C# i Visual Basic).

Poniższy przykład ilustruje strukturę program obsługi zdarzeń asynchronicznych StartButton_Click, który wywołuje metodę komunikacji asynchronicznej, ExampleMethodAsync.Wynik metody pobierania jest długością pobrany witryny sieci Web.Kod jest odpowiednia dla aplikacji Windows Presentation Foundation (WPF) lub magazynu systemu Windows.

// In desktop apps that you create by using Visual Studio 2012, you must 
// add a reference and a using directive for System.Net.Http.
// In Windows Store apps, you must add using directives for System.Net.Http 
// and System.Threading.Tasks.

private async void StartButton_Click(object sender, RoutedEventArgs e)
{
    // ExampleMethodAsync returns a Task<int> and has an int result.
    // A value is assigned to intTask when ExampleMethodAsync reaches
    // an await.
    try
    {
        Task<int> intTask = ExampleMethodAsync();
        // You can do other work here that doesn't require the result from
        // ExampleMethodAsync. . . .
        // You can access the int result when ExampleMethodAsync completes.
        int intResult = await intTask;
    
        // Or you can combine the previous two steps:
        //int intResult = await ExampleMethodAsync();

        // Process the result (intResult). . . .
    }
    catch (Exception)
    {
        // Process the exception. . . .
    }
}

public async Task<int> ExampleMethodAsync()
{
    var httpClient = new HttpClient();

    // At the await expression, execution in this method is suspended, and
    // control returns to the caller of ExampleMethodAsync.
    // Variable exampleInt is assigned a value when GetStringAsync completes.
    int exampleInt = (await httpClient.GetStringAsync("https://msdn.microsoft.com")).Length;

    // You can break the previous line into several steps to clarify what happens:
    //Task<string> contentsTask = httpClient.GetStringAsync("https://msdn.microsoft.com");
    //string contents = await contentsTask;
    //int exampleInt = contents.Length; 

    // Continue with whatever processing is waiting for exampleInt. . . .

    // After the return statement, any method that's awaiting
    // ExampleMethodAsync can get the integer result.
    return exampleInt;
}
Ważna uwagaWażne

Aby uzyskać pełny przykład WPF, która używa podobnych elementów, zobacz Instruktaż: Dostęp do sieci Web za pomocą transmisji asynchronicznej i poczekać (C# i Visual Basic).Można pobrać kod instruktażu z Przykładów kodu autora.

Zazwyczaj metody zmodyfikowany przez async słowo kluczowe zawiera co najmniej jeden czekają na wyrażenia lub instrukcji.Metoda jest uruchamiana synchronicznie aż do napotkania pierwszego await wyrażenie, w którym miejscu jest zawieszone do czasu ukończenia zadania oczekiwany.W międzyczasie sterowanie jest zwracane do obiektu wywołującego metodę.Jeśli metoda nie ma await wyrażenie lub instrukcja, a następnie go wykonany synchronicznie.Ostrzeżenia kompilatora powiadamia użytkownika, aby wszelkie metody komunikacji asynchronicznej, które nie zawierają await , ponieważ taka sytuacja może wskazać błąd.Aby uzyskać więcej informacji, zobacz Ostrzeżenie kompilatora (poziom 1) CS4014.

async Słowo kluczowe jest słowem kluczowym kontekstowych.To słowo kluczowe, gdy modyfikuje metodę, wyrażenie lambda lub metody anonimowej.W innych kontekstach jest interpretowany jako identyfikator.

Zwracanych typów

Metoda async mogą mieć typu zwracanego z Task, Task<TResult>, lub void.Metody nie można zadeklarować dowolną ref lub się parametry, chociaż może wywołać metody, które mają takie parametry.

Należy określić Task<TResult> jako typu zwrotnego metody komunikacji asynchronicznej Jeśli zwrotu instrukcja metody określa operandu typu TResult.Możesz użyć Task Jeśli nie znaczące wartość jest zwracana, gdy metoda jest ukończona.Oznacza to, zwraca wywołanie metody Task, ale gdy Task jest zakończone, wszelkie await wyrażenie, który oczekuje na Task daje w wyniku void.

void Zwraca typ służy przede wszystkim do definiowania programy obsługi zdarzeń, gdzie void zwracany typ jest wymagane.Obiekt wywołujący metodę komunikacji asynchronicznej zwracanie void nie można czekać na to i nie może przechwytywać wyjątków, które metoda wygeneruje.

Aby uzyskać dodatkowe informacje i przykłady, zobacz Typy zwrotu Async (C# i Visual Basic).

Zobacz też

Zadania

Instruktaż: Dostęp do sieci Web za pomocą transmisji asynchronicznej i poczekać (C# i Visual Basic)

Informacje

poczekać (C# odniesienia)

AsyncStateMachineAttribute

Koncepcje

Asynchroniczne programowania przy użyciu asynchronicznej i poczekać (C# i Visual Basic)