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