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