async-лямбда
Запись async () => ... даёт
делегат, возвращающий Task или
Task<T>. Его можно await
как обычную задачу. В отличие от
async void
результат ожидают. Готовое число -
через
FromResult.
Синтаксис
Func<Task<int>> work = async () => 12345;
int value = await work();
Пример
Давайте вызвать async лямбду:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Func<Task<int>> f = async () => 12345;
int res = await f();
Console.WriteLine(res);
}
}
Результат выполнения кода:
12345
Пример
Давайте дождаться FromResult
внутри лямбды:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Func<Task<string>> f = async () =>
{
return await Task.FromResult("abcde");
};
string res = await f();
Console.WriteLine(res);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте передать лямбду в
Task.Run:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Func<Task<int>> f = async () => 12345;
int res = await Task.Run(f);
Console.WriteLine(res);
}
}
Результат выполнения кода:
12345
Смотрите также
-
async void,
метод без возвращаемой задачи -
метод
Run,
запуск делегата -
метод
ConfigureAwait,
настройкаawait -
Task,
тип, который возвращает лямбда