IRequestHandler возврат void - PullRequest
       39

IRequestHandler возврат void

0 голосов
/ 14 февраля 2019

Пожалуйста, смотрите код ниже:

public class CreatePersonHandler
    : IRequestHandler<CreatePersonCommand,bool>
{
    public async Task<bool> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
    {
        return true;
    }
}

Работает как положено, т.е. хандер достигнут и возвращает true.Как мне разобраться со сценарием, когда обработчик ничего не возвращает?Я хочу сделать это:

public async void Handle(CreatePersonCommand message, CancellationToken cancellationToken)
{
    //don't return anything
}

Я потратил последние два часа на поиски в Google.Например, я посмотрел здесь: Зарегистрируйте конвейер MediatR с void / Task response и здесь: https://github.com/jbogard/MediatR/issues/230.

1 Ответ

0 голосов
/ 14 февраля 2019

Вообще говоря, если метод на основе задачи ничего не возвращает, вы можете вернуть завершенную задачу

    public Task Handle(CreatePersonCommand message, CancellationToken cancellationToken)
    {
        return Task.CompletedTask;
    }

Теперь в терминах MediatR значение нуждается быть возвращенным.В случае отсутствия значения вы можете использовать Unit:

    public Task<Unit> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
    {
        return Task.FromResult(Unit.Value);
    }

или, в случае некоторого асинхронного кода где-то

    public async Task<Unit> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
    {
        await Task.Delay(100);

        return Unit.Value;
    }

Тогда сигнатура класса должна быть:

public class CreatePersonHandler : IRequestHandler<CreatePersonCommand>

что сокращенно от

public class CreatePersonHandler : IRequestHandler<CreatePersonCommand, Unit>
...