Rhino Mock Stub Async Method

У меня есть ViewModel, который в конструкторе делает вызов метода async void для добавления в коллекцию

public MyViewModel(ICommandHandler commandHandler)
{
    _commandHandler = commandHandler;
    SetupCollection();
}


private async void SetupCollection()
{
    var commands = GetCommands();

    foreach (var command in commands)
    {
        var response = await _commandHandler.ExecuteGetReply(command);

        if (response != null)
           Response.Add(response);
    }
}

Как именно я закрою команду _commandHandler.ExecuteGetReply(), чтобы вернуть значение?

Кроме того, хорошо ли иметь такую ​​функцию в конструкторе, чтобы сделать что-то вроде этого? Или, возможно, это может быть связано с вызовом... override void OnActivate() (я использую Caliburn Micro)?

Ответ 1

ICommandHandler.ExecuteGetReply, похоже, возвращает Task<Response>, чтобы вы могли сделать что-то вроде:

ICommand commandArg;
Response response;
stubHandler.Stub(h => h.ExecuteGetReply(commandArg)).Return(Task.FromResult(response));

Я бы не вызвал метод async void из вашего конструктора, так как вы не сможете получить уведомление о его завершении.