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); } } } } }