Поделиться через


async (справочник по C#)

Модификатор async указывает, что метод, лямбда-выражение или Метод anonymous, он изменяет асинхронными.Эти методы называются методы токена.

Метод токена предоставляет удобный способ работы задачи потенциально долго без блокировки потока вызывающего объекта.Вызывающая сторона метода токена может возобновить свою работу, не дожидаясь метод токена для выполнения.

ПримечаниеПримечание

Ключевые слова async и await были введены в Visual Studio 2012.Сведения о других новых функциях в этой версии см. в разделе Новые возможности Visual Studio 2012, версия-кандидат.

Введение в токен программировании см. в разделе Асинхронное программирование с использованием ключевых слов Async и Await (C# и Visual Basic).

В следующем примере показана структура обработчика событий токена StartButton_Click, который вызывает метод токена, ExampleMethodAsync.Результат выполнения метода длина загруженного веб-сайта.Код подходит для Windows Presentation Foundation (WPF) или приложение 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;
}
Важное примечаниеВажно

Полный пример, в котором используются одинаковые элементы WPF см. в разделе Пошаговое руководство. Получение доступа к Интернету с помощью модификатора Async и оператора Await (C# и Visual Basic).Можно загрузить из Примеры кода разработчика кода пошагового руководства.

Обычно метод измененный ключевым словом async содержит по крайней мере одно выражение или оператора рекомендуется.Метод выполняется одновременно до тех пор, пока не будет достигнут первое выражение await, в котором он точка приостановлена, пока ожидается задача не будет завершена.В то же время, элемент управления возвращается вызывающему объекту метода.Если метод не содержит выражение await или выписка, он выполняет одновременно.Предупреждение компилятора предупреждает требуется для всех методов токена, не содержащих await, поскольку в этой ситуации может отображать ошибку.Для получения дополнительной информации см. Предупреждение компилятора (уровень 1) CS4014.

Ключевое слово async контекстно-зависимое ключевое слово.Ключевое слово, когда изменяется метод, lambda или анонимный метод.Во всех других контекстах, оно интерпретируется как идентификатор.

Возвращаемые типы

Метод токена может иметь возвращаемый тип Task, Task<TResult> или void.Метод не может объявить все параметры ref или out, хотя он может вызывать методы, которые имеют одинаковые параметры.

Необходимо указать Task<TResult> в качестве возвращаемого типа метода токена, если выписка return метода определяет операнд типа TResult.Класс Task используется при отсутствии информативное значение не возвращается, когда метод завершения.То есть вызов метода Task возвращает Task, но при завершении любое выражение await, ожидает Task возвращает значение void.

Возвращаемый тип void используется в основном для определения обработчики событий, где тип возвращаемого значения - void.Вызывающий объект неточно возвратя метода токена не может ожидать его и не может перехватывать исключения, метод создает исключение.

Дополнительные сведения и примеры см. в разделе Асинхронные типы возвращаемых значений (C# и Visual Basic).

См. также

Задачи

Пошаговое руководство. Получение доступа к Интернету с помощью модификатора Async и оператора Await (C# и Visual Basic)

Ссылки

await (Справочник по C#)

AsyncStateMachineAttribute

Основные понятия

Асинхронное программирование с использованием ключевых слов Async и Await (C# и Visual Basic)