/// <inheritdoc />
        public override Task <string[]> ScanAsync(string path, CancellationToken cancellationToken)
        {
            var exitCode = _processRunner.RunTillCompletion(BackendPath, GetBackendArguments(path), cancellationToken,
                                                            out var standardOutput, out var standardError);

            if (ThrowOnNonZeroExitCode && exitCode != 0)
            {
                throw new ApplicationException($"Process has terminated with an exit code {exitCode}");
            }

            return(Task.FromResult(MatchRegex
                                   .Matches(ParseStdErr ? standardError : standardOutput)
                                   .Where(x => x.Success)
                                   .Select(x => x.Groups["threat"].Value)
                                   .ToArray()));
        }