Skip to content

ConductorBaseWithActiveItem swallows exceptions in ActivateItemAsync #863

Open
@nkreipke

Description

@nkreipke

Exceptions thrown in ActivateItemAsync, including all other methods called from the default implementation (TryDeactivateAsync, TryActivateAsync, NotifyOfPropertyChange, OnActivationProcessed) are silently discarded.

Repro:

public class MainViewModel : Conductor<Model>.Collection.OneActive
{
    public MainViewModel()
    {
        Items.AddRange(new []
        {
            new Model(),
            new Model(),
            new Model(),
        });
    }

    public override Task ActivateItemAsync(Model item, CancellationToken cancellationToken = new CancellationToken())
    {
        throw new Exception("please notice me");
    }
}

When selecting an item in a WPF ListBox, nothing happens. This is especially bad if there is additional code after the exception, which is simply not being executed without any indication.

I've found a similar issue #745 which is probably related.

The reason is that the setter of ActiveItem calls ActivateItemAsync without awaiting the task. This is a regression from 3.x. I realize awaiting in a setter is not possible and this might be a design issue:

set => ActivateItemAsync(value, CancellationToken.None);

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions