Skip to content

Esperar una operación asíncrona ​

Un único valor obtenido de forma asíncrona se representa con Task<Result<T>>. Primero espera la tarea; después comprueba el resultado.

csharp
using Greencore.Platform.Errors;
using Greencore.Platform.Results;
using Greencore.Platform.Results.Extensions;

var resultado = await LeerAsync(CancellationToken.None);
var texto = await resultado.MapAsync(valor => Task.FromResult($"Valor: {valor}"));
Console.WriteLine(texto.Value);

static async Task<Result<int>> LeerAsync(CancellationToken token)
{
    await Task.Delay(10, token);
    return Result<int>.Ok(12);
}

Para una operación sin valor utiliza Task<VoidResult>. Una secuencia que entrega elementos durante la lectura usa AsyncEnumerableResult.

Componer después de esperar ​

MapAsync, BindAsync y MatchAsync reciben funciones que devuelven Task. Se aplican al resultado, no directamente a Task<Result<T>>.

Pasa la cancelación a la operación dentro de la función, por ejemplo valor => ConsultarAsync(valor, token). Las excepciones y la cancelación se propagan: las extensiones no las convierten en errores.

Recuerda: esperar la tarea y comprobar el resultado son dos pasos distintos.

Uso personal limitado. Uso comercial sujeto a autorización escrita.