// Is there a way to have a Task/void override protected override async void Run(Cmd cmd) { // We know track has value from checks before var track = cmd.Arg.GetValueOrDefault().Lexeme; var album = cmd.FlagArgs.ContainsKey(albumFlag) ? cmd.FlagArgs[albumFlag].Lexeme : null; var artist = cmd.FlagArgs.ContainsKey(artistFlag) ? cmd.FlagArgs[artistFlag].Lexeme : null; Clti.WriteLine($"Finding: {track} {album} {artist}"); var tracks = (await db.LoadTracks()) .Where(x => artist?.Equals(x.Artist ?? "", StringComparison.OrdinalIgnoreCase) ?? true) .Where(x => album?.Equals(x.Album ?? "", StringComparison.OrdinalIgnoreCase) ?? true) .Where(x => track.Equals(x.Title ?? "", StringComparison.OrdinalIgnoreCase)).ToList(); if (tracks.Count == 0) { Clti.WriteError("No tracks found matching criterion"); } else if (tracks.Count > 1) { Clti.WriteLine("Multiple tracks found, please narrow criterion"); } tracks.ForEach(Clti.WriteLine); if (tracks.Count == 1) { Mp.SetTrack(tracks[0]); } }