private static IEnumerable<ParameterInfo> ExtractProgressParameter(ParameterInfo[] parameters, out Type progressReportingType) { var lastParameter = parameters.LastOrDefault(); progressReportingType = null; if (IsProgressType(lastParameter)) { // This method takes an IProgress<T> as the last parameter and thus supports progress reporting progressReportingType = lastParameter.ParameterType.GenericTypeArguments[0]; // Strip the IProgress<T> param from the method descriptor params list // as we don't want to include it when trying to match methods return parameters.Take(parameters.Length - 1); } return parameters; }