ValueTask
ValueTask и ValueTask<int> - структуры для асинхронного результата. Готовое число можно обернуть в new ValueTask<int> или ValueTask.FromResult. Один ValueTask нельзя await дважды.
Синтаксис
ValueTask<int> vt = ValueTask.FromResult(12345);
Пример
Давайте дождём готовое значение через FromResult:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var vt = ValueTask.FromResult(12345);
int res = await vt;
Console.WriteLine(res);
}
}
Результат выполнения кода:
12345
Пример
Давайте создадим new ValueTask<int> и проверим IsCompleted:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var vt = new ValueTask<int>(12345);
Console.WriteLine(vt.IsCompleted);
int res = await vt;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
12345
Смотрите также
-
Task,
классическая задача -
TaskCompletionSource,
ручное завершение -
TrySetResult,
безопасная выдача -
SetResult,
завершение значением