Оператор await
await ставят перед выражением, которое
даёт Task или Task<T>. Пока задача
не завершена, управление возвращается вызывающему
коду; после завершения
async-метод
продолжается, а для Task<T> вы получаете
значение типа T. Точка входа оформляют
как static async Task Main.
Синтаксис
await задача;
тип res = await задачаСРезультатом;
Пример
Давайте дождёмся готовой строки из задачи:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string res = await Task.FromResult("abcde");
Console.WriteLine(res);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте дождёмся задачи без результата:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
await Task.CompletedTask;
Console.WriteLine("done");
}
}
Результат выполнения кода:
"done"
Пример
Давайте получим число через Task<int>:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
int res = await Task.FromResult(12);
Console.WriteLine(res);
}
}
Результат выполнения кода:
12
Пример
Давайте вызовем async-метод и дождёмся его
через await:
using System;
using System.Threading.Tasks;
class Program
{
static async Task<string> GetStrAsync()
{
return await Task.FromResult("12345");
}
static async Task Main()
{
string res = await GetStrAsync();
Console.WriteLine(res);
}
}
Результат выполнения кода:
"12345"
Смотрите также
-
модификатор
async,
которым помечают метод сawait -
await foreach,
который ждёт элементы асинхронной последовательности -
метод
FromResult,
который создаёт завершённую задачу с данными -
свойство
CompletedTask,
которое даёт уже завершённую пустую задачу