public void Write(object clientObj, ValueStatusTimestamp valueStatusTimestamp)
        {
            if (XiList is null || XiList.Disposed)
            {
                return;
            }

            ClientObjectInfo?modelItem;

            if (!ClientObjectInfosDictionary.TryGetValue(clientObj, out modelItem))
            {
                return;
            }

            if (modelItem.XiListItemWrapper is null || modelItem.XiListItemWrapper.XiListItem is null || modelItem.XiListItemWrapper.XiListItem.ResultCode != XiFaultCodes.S_OK)
            {
                return;
            }

            IXiDataListItem xiDataListItem = modelItem.XiListItemWrapper.XiListItem;

            try
            {
                xiDataListItem.PrepareForWrite(valueStatusTimestamp);

                try
                {
                    XiList.CommitWriteDataListItems();
                }
                catch
                {
                }
            }
            catch (Exception ex)
            {
                Logger?.LogWarning(ex, "Exception");
            }
        }
        /// <summary>
        ///     Returns clientObjs whose write failed.
        ///     If connection error, no throw and returns all clientObjs.
        /// </summary>
        /// <param name="clientObjs"></param>
        /// <param name="valueStatusTimestamps"></param>
        /// <returns></returns>
        public object[] Write(object[] clientObjs, ValueStatusTimestamp[] valueStatusTimestamps)
        {
            if (XiList is null || XiList.Disposed)
            {
                return(clientObjs);
            }

            int i      = -1;
            var result = new List <object>();

            foreach (var clientObj in clientObjs)
            {
                i++;

                ClientObjectInfo?modelItem;
                if (!ClientObjectInfosDictionary.TryGetValue(clientObj, out modelItem))
                {
                    result.Add(clientObj);
                    continue;
                }

                if (modelItem.XiListItemWrapper is null ||
                    modelItem.XiListItemWrapper.XiListItem is null ||
                    modelItem.XiListItemWrapper.XiListItem.ResultCode != XiFaultCodes.S_OK)
                {
                    result.Add(clientObj);
                    continue;
                }
                IXiDataListItem xiDataListItem = modelItem.XiListItemWrapper.XiListItem;
                xiDataListItem.PrepareForWrite(valueStatusTimestamps[i]);
            }

            IEnumerable <IXiDataListItem>?failedItems = null;

            try
            {
                failedItems = XiList.CommitWriteDataListItems();
            }
            catch
            {
                return(clientObjs);
            }

            if (failedItems is not null)
            {
                foreach (var xiDataListItem in failedItems)
                {
                    var o = xiDataListItem.Obj as XiListItemWrapper;
                    if (o is null)
                    {
                        throw new InvalidOperationException();
                    }
                    foreach (var modelItem in o.ClientObjectInfosCollection)
                    {
                        if (modelItem.ClientObj is not null)
                        {
                            result.Add(modelItem.ClientObj);
                        }
                    }
                }
            }

            return(result.ToArray());
        }