PipelineComponent.GetDependentInputs(Int32) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает коллекцию идентификаторов потоков входа, которые ожидают дополнительные данные и поэтому блокируют заданный поток входа.
public:
virtual System::Collections::ObjectModel::Collection<int> ^ GetDependentInputs(int blockedInputID);
public virtual System.Collections.ObjectModel.Collection<int> GetDependentInputs (int blockedInputID);
abstract member GetDependentInputs : int -> System.Collections.ObjectModel.Collection<int>
override this.GetDependentInputs : int -> System.Collections.ObjectModel.Collection<int>
Public Overridable Function GetDependentInputs (blockedInputID As Integer) As Collection(Of Integer)
Параметры
- blockedInputID
- Int32
Идентификатор потока входа, который блокируется, пока остальные потоки входа ожидают дополнительные данные.
Возвращаемое значение
Коллекция идентификаторов потоков входа, которые ожидают дополнительные данные и поэтому блокируют поток входа, заданный параметром blockedInputID
.
Примеры
Для определенных заблокированных входных данных следующая реализация GetDependentInputs метода возвращает коллекцию входных данных, ожидающих получения дополнительных данных, и таким образом блокирует указанные входные данные. Компонент определяет блокирующие входные данные, проверяя наличие входных данных, отличных от указанных входных данных, которые в настоящее время не имеют данных для обработки в буферах, которые компонент уже получил (inputBuffers[i].CurrentRow() == null
). Затем метод GetDependentInputs возвращает коллекцию блокирующих входов в виде коллекции идентификаторов входов.
public override Collection<int> GetDependentInputs(int blockedInputID)
{
Collection<int> currentDependencies = new Collection<int>();
for (int i = 0; i < ComponentMetaData.InputCollection.Count; i++)
{
if (ComponentMetaData.InputCollection[i].ID != blockedInputID
&& inputBuffers[i].CurrentRow() == null)
{
currentDependencies.Add(ComponentMetaData.InputCollection[i].ID);
}
}
return currentDependencies;
}
Комментарии
При установке значения свойства true
в DtsPipelineComponentAttributeкомпоненте пользовательского Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure потока данных поддерживается более двух входных данных, необходимо также предоставить реализацию для GetDependentInputs метода.
Подсистема обработки потока данных вызывает метод GetDependentInputs только в случаях, когда пользователь подключает к компоненту более двух входов. Если компонент имеет только два входных данных, а IsInputReady метод указывает, что один вход заблокирован (canProcess
= false
), обработчик потока данных знает, что другой вход ожидает получения дополнительных данных. Однако при наличии более двух входных данных и IsInputReady метод указывает, что один вход заблокирован, дополнительный код в GetDependentInputs методе определяет входные данные, ожидающие получения большего объема данных.
Дополнительные сведения об обработке чрезмерного использования памяти, если входные данные пользовательского компонента потока данных создают данные с неравномерной скоростью, см. в разделе "Разработка компонентов Поток данных с несколькими входными данными".