Метод ContinueWith
Task.ContinueWith возвращает новую
задачу-продолжение. Чтобы получить
результат, внешнюю задачу дожидаются
через await. Цепочки часто проще
писать через await напрямую, но
ContinueWith показывает связь
явно.
Синтаксис
Task<int> next = task.ContinueWith(t => t.Result + 1);
Пример
Давайте прибавить единицу после
FromResult:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Task<int> next = Task.FromResult(1)
.ContinueWith(t => t.Result + 1);
int res = await next;
Console.WriteLine(res);
}
}
Результат выполнения кода:
2
Пример
Давайте построить вторую ступень цепочки:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Task<int> chain = Task.FromResult(1)
.ContinueWith(t => t.Result + 1)
.ContinueWith(t => t.Result + 1);
int res = await chain;
Console.WriteLine(res);
}
}
Результат выполнения кода:
3
Пример
Давайте вернуть строку из продолжения:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Task<string> next = Task.FromResult(1)
.ContinueWith(_ => "abcde");
string res = await next;
Console.WriteLine(res);
}
}
Результат выполнения кода:
"abcde"
Смотрите также
-
метод
FromResult,
исходная задача цепочки -
метод
Run,
запуск делегата в пуле -
async-лямбда,
альтернатива черезawait -
Task,
класс, где объявлен метод