IsSynchronized
Свойство предоставляет информацию о синхронизации коллекции параметров при многопоточной работе.
С точки зрения работы с потоками коллекция объектов может относиться к безопасной или небезопасной.
Если несколько потоков могут вызывать свойства и методы коллекции, эти вызовы необходимо синхронизировать. В противном случае один поток может прервать операцию другого потока, и коллекция будет иметь неверное состояние. Коллекция, элементы которой защищены от подобных прерываний, называется потокобезопасной.
Свойство IsSynchronized позволяет проверить, безопасна ли текущая версия коллекции параметров.
Если коллекция параметров не синхронизирована, необходимо в свойстве SyncRoot коллекции параметров получить объект, который может использоваться для синхронизации доступа к коллекции. Это позволяет синхронизировать потоки, которые могут использовать коллекцию параметров, с помощью одного и того же объекта.
Примечание
В ADO.NET-провайдере СУБД ЛИНТЕР в коллекции параметров отсутствует метод Synchronized, но есть свойство SyncRoot, поэтому коллекцию параметров можно сделать потокобезопасной только с помощью механизма блокировки.
Декларация
public override bool IsSynchronized {get;};
Значение свойства
Статус коллекции параметров:
-
true – коллекция синхронизирована;
-
false – коллекция не синхронизирована.
Значение по умолчанию false.
Исключения
Отсутствуют.
Пример
// C#
using System;
using System.Data;
using System.Data.Common;
class IsSynchronizedSample
{
static void Main()
{
// Создание фабрики классов провайдера
DbProviderFactory factory =
DbProviderFactories.GetFactory("System.Data.LinterClient");
// Создание команды
DbCommand myCommand = factory.CreateCommand();
// Создание параметров
DbParameter param1 = factory.CreateParameter();
param1.ParameterName = "MAKE";
param1.DbType = DbType.String;
myCommand.Parameters.Add(param1);
DbParameter param2 = factory.CreateParameter();
param2.ParameterName = "MODEL";
param2.DbType = DbType.String;
myCommand.Parameters.Add(param2);
// Получение коллекции параметров
DbParameterCollection myParamCollection = myCommand.Parameters;
if (!myParamCollection.IsSynchronized)
{
// Блокировка
lock (myParamCollection.SyncRoot)
{
foreach (DbParameter myParam in myParamCollection)
{
Console.WriteLine(myParam.ParameterName);
}
}
}
}
}