Please see the code below:
public class CreatePersonHandler
: IRequestHandler<CreatePersonCommand,bool>
{
public async Task<bool> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
return true;
}
}
It works as expected i.e. the hander is reached and returns true. How do I deal with the scenario where the handler returns nothing? I want to do this:
public async void Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
//don't return anything
}
I have spent the last two hours Googling this. For example, I have looked here: Register a MediatR pipeline with void/Task response and here: https://github.com/jbogard/MediatR/issues/230.
Generally speaking, if a Task based method does not return anything you can return a completed Task
public Task Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
Now, in MediatR terms a value needs te be returned. In case of no value you can use Unit
:
public Task<Unit> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
return Task.FromResult(Unit.Value);
}
or, in case of some async code somewhere
public async Task<Unit> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
await Task.Delay(100);
return Unit.Value;
}
The class signature should then be:
public class CreatePersonHandler : IRequestHandler<CreatePersonCommand>
which is short for
public class CreatePersonHandler : IRequestHandler<CreatePersonCommand, Unit>