Task
Task<int> - тоже задача, что и Task, но с типом результата. Необобщённый Task значения не даёт.
Синтаксис
Task<int> task = Task.FromResult(12345);
Пример
Давайте дождём готовую задачу через Task.FromResult:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
int res = await Task.FromResult(12345);
Console.WriteLine(res);
}
}
Результат выполнения кода:
12345
Пример
Давайте получим то же число через Result:
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
var task = Task.FromResult(12345);
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.FromException<int>(new InvalidOperationException("abcde"));
try
{
await task;
Console.WriteLine("ok");
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}
try
{
task.Result;
}
catch (AggregateException)
{
Console.WriteLine("fail");
}
}
}
Результат выполнения кода:
"abcde"
"fail"
Смотрите также
-
ValueTask,
задача без лишнего объекта -
TaskCompletionSource,
завершение вручную -
SetResult,
выдать результат -
Task,
свойство задачи