PipelineComponent.IsInputReady(Int32[], Boolean[]) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет, какие входы, подключённые к компоненту, ожидают дополнительных данных, а какие имеют достаточно данных для обработки и блокируются.
public:
virtual void IsInputReady(cli::array <int> ^ inputIDs, cli::array <bool> ^ % canProcess);
public virtual void IsInputReady(int[] inputIDs, ref bool[] canProcess);
abstract member IsInputReady : int[] * Boolean[] -> unit
override this.IsInputReady : int[] * Boolean[] -> unit
Public Overridable Sub IsInputReady (inputIDs As Integer(), ByRef canProcess As Boolean())
Параметры
- inputIDs
- Int32[]
Массив идентификаторов входов, подключённых к компоненту.
- canProcess
- Boolean[]
Массив булевых значений, указывающий, ждёт ли каждый вход дополнительных данных (true) или блокируется (false), передается по ссылке.
Примеры
В следующем примере реализация IsInputReady метода указывает на то, что вход ожидает получения дополнительных данных, когда выполнены следующие условия:
Для входных данных доступно больше данных для входа (
!inputEOR).В настоящее время компонент не имеет доступных данных для обработки для входных данных в буферах, которые компонент уже получил (
inputBuffers[inputIndex].CurrentRow() == null).
Если вход ожидает получения дополнительных данных, компонент потока данных указывает это, устанавливая значение true элемента в canProcess массиве, соответствующего этому входу.
Наоборот, когда у компонента всё ещё есть данные для обработки для входа, пример приостанавливает обработку входа. Пример делает это, устанавливая значение false элемента в canProcess массиве, соответствующего этому входу.
public override void IsInputReady(int[] inputIDs, ref bool[] canProcess)
{
for (int i = 0; i < inputIDs.Length; i++)
{
int inputIndex = ComponentMetaData.InputCollection.GetObjectIndexByID(inputIDs[i]);
canProcess[i] = (inputBuffers[inputIndex].CurrentRow() == null)
&& !inputEOR[inputIndex];
}
}
В предыдущем примере использован булев inputEOR массив для указания, доступно ли больше данных для каждого входа.
EOR В названии массива это означает «конец набора строк» и относится к EndOfRowset свойству буферов потоков данных. В части примера, которая здесь не включена, метод ProcessInput проверяет значение свойства EndOfRowset для каждого буфера данных, который он получает. Когда значение указываетtrue, что для входного входа больше нет доступных исходных данных, пример устанавливает значение значения inputEOR для этого входа.true Эта реализация метода IsInputReady устанавливает соответствующее значение в canProcess массиве для false входа, когда значение указывает inputEOR , что для входного входа больше нет доступных исходных данных.
Комментарии
Когда вы устанавливаете значение Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure свойства в trueDtsPipelineComponentAttribute, вы также должны предоставить реализацию для этого IsInputReady метода.
Движок потока данных вызывает IsInputReady метод, чтобы определить, какие входы ожидают получения дополнительных данных. В реализации этого метода вы задаёте статус каждого входа компонента в булевом canProcess массиве. (Входы идентифицируются по их ID-значениям в массивеinputIDs.) Когда вы устанавливаете значение входа в canProcess массиве, true движок потока данных вызывает ProcessInput метод компонента и предоставляет дополнительные данные для указанного входа.
Хотя доступно больше данных по потоку, значение хотя бы одного входа всегда должно находиться true в canProcess массиве, иначе обработка останавливается.
Для получения дополнительной информации о работе с чрезмерным использованием памяти, если входные данные пользовательского компонента data flow производят данные с неравномерной скоростью, см. раздел Developing Поток данных Components with Multiple Inputs.