Свойство Result
Task<T>.Result блокирует поток,
пока задача не завершится. При сбое
бросает AggregateException, а
await - исходное исключение.
Успешное значение даёт
FromResult.
Синтаксис
int value = task.Result;
Пример
Давайте прочитаем Result у готовой
задачи:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var task = Task.FromResult(12345);
await task;
int res = task.Result;
Console.WriteLine(res);
}
}
Результат выполнения кода:
12345
Пример
Давайте сравнить await и
Result:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var task = Task.FromResult(12345);
int fromAwait = await task;
int fromResult = task.Result;
bool res = fromAwait == fromResult;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте поймать AggregateException
у сбойной задачи:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var task = Task.FromException<int>(
new InvalidOperationException("abcde"));
await Task.Yield();
try
{
int x = task.Result;
}
catch (AggregateException)
{
Console.WriteLine("fail");
}
}
}
Результат выполнения кода:
"fail"
Смотрите также
-
метод
Wait,
ждать без чтенияResult -
свойство
Exception,
сохранённый сбой -
метод
FromException,
сбойная задача -
Task,
класс, где объявлено свойство