コード例 #1
0
ファイル: NodeFactory.cs プロジェクト: gibri/Zookeeper.Net
        /// <summary>
        /// 批量创建一组节点
        /// </summary>
        /// <param name="zk"></param>
        /// <param name="nodes"></param>
        /// <param name="index"></param>
        /// <param name="callback">当所有节点创建完毕时的回调</param>
        static private void TryEnsureCreate(IZookClient zk, NodeInfo[] nodes, int index, Action callback)
        {
            if (index >= nodes.Length)
            {
                if (callback != null)
                {
                    callback();
                }
                return;
            }

            var currNode = nodes[index];

            zk.Create(currNode.Path, currNode.Data, currNode.ACL, currNode.CreateMode).ContinueWith(c =>
            {
                if (c.IsFaulted)
                {
                    var kex = c.Exception.InnerException as KeeperException;
                    if (kex == null || kex.Error != Data.ZoookError.NODEEXISTS)
                    {
                        TaskEx.Delay(new Random().Next(1000, 3000), () => TryEnsureCreate(zk, nodes, index, callback));
                        return;
                    }
                }
                TryEnsureCreate(zk, nodes, index + 1, callback);
            });
        }
コード例 #2
0
        /// <summary>
        /// try create node
        /// </summary>
        /// <param name="zk"></param>
        /// <param name="node"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">zk is null.</exception>
        /// <exception cref="ArgumentNullException">node is null.</exception>
        static public Task TryCreate(IZookClient zk, NodeInfo node)
        {
            if (zk == null) throw new ArgumentNullException("zk");
            if (node == null) throw new ArgumentNullException("node");

            return zk.Create(node.Path, node.Data, node.ACL, node.CreateMode).ContinueWith(c =>
            {
                var ex = c.Exception.InnerException as KeeperException;
                if (ex != null && ex.Error == Data.ZoookError.NODEEXISTS) return;
                throw c.Exception.InnerException;
            }, TaskContinuationOptions.OnlyOnFaulted);
        }
コード例 #3
0
ファイル: NodeFactory.cs プロジェクト: tokenian/Zookeeper.Net
        /// <summary>
        /// 批量创建一组节点
        /// </summary>
        /// <param name="zk"></param>
        /// <param name="nodes"></param>
        /// <param name="index"></param>
        /// <param name="callback">当所有节点创建完毕时的回调</param>
        static private void TryEnsureCreate(IZookClient zk, NodeInfo[] nodes, int index, Action callback)
        {
            if (index >= nodes.Length) { if (callback != null) callback(); return; }

            var currNode = nodes[index];
            zk.Create(currNode.Path, currNode.Data, currNode.ACL, currNode.CreateMode).ContinueWith(c =>
            {
                if (c.IsFaulted)
                {
                    var kex = c.Exception.InnerException as KeeperException;
                    if (kex == null || kex.Error != Data.ZoookError.NODEEXISTS)
                    {
                        TaskEx.Delay(new Random().Next(1000, 3000), () => TryEnsureCreate(zk, nodes, index, callback));
                        return;
                    }
                }
                TryEnsureCreate(zk, nodes, index + 1, callback);
            });
        }
コード例 #4
0
        /// <summary>
        /// try create node
        /// </summary>
        /// <param name="zk"></param>
        /// <param name="node"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">zk is null.</exception>
        /// <exception cref="ArgumentNullException">node is null.</exception>
        static public Task TryCreate(IZookClient zk, NodeInfo node)
        {
            if (zk == null)
            {
                throw new ArgumentNullException("zk");
            }
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            return(zk.Create(node.Path, node.Data, node.ACL, node.CreateMode).ContinueWith(c =>
            {
                var ex = c.Exception.InnerException as KeeperException;
                if (ex != null && ex.Error == Data.ZoookError.NODEEXISTS)
                {
                    return;
                }
                throw c.Exception.InnerException;
            }, TaskContinuationOptions.OnlyOnFaulted));
        }
コード例 #5
0
        /// <summary>
        /// try create nodes
        /// </summary>
        /// <param name="zk"></param>
        /// <param name="nodes"></param>
        /// <param name="index"></param>
        /// <param name="source"></param>
        static private void TryCreate(IZookClient zk, NodeInfo[] nodes, int index, TaskCompletionSource<bool> source)
        {
            if (index >= nodes.Length)
            {
                source.TrySetResult(true);
                return;
            }

            var node = nodes[index];
            zk.Create(node.Path, node.Data, node.ACL, node.CreateMode).ContinueWith(c =>
            {
                if (c.IsFaulted)
                {
                    var ex = c.Exception.InnerException as KeeperException;
                    if (ex == null || ex.Error != Data.ZoookError.NODEEXISTS)
                    {
                        source.TrySetException(c.Exception.InnerException);
                        return;
                    }
                }
                TryCreate(zk, nodes, index + 1, source);
            });
        }
コード例 #6
0
        /// <summary>
        /// try create nodes
        /// </summary>
        /// <param name="zk"></param>
        /// <param name="nodes"></param>
        /// <param name="index"></param>
        /// <param name="source"></param>
        static private void TryCreate(IZookClient zk, NodeInfo[] nodes, int index, TaskCompletionSource <bool> source)
        {
            if (index >= nodes.Length)
            {
                source.TrySetResult(true);
                return;
            }

            var node = nodes[index];

            zk.Create(node.Path, node.Data, node.ACL, node.CreateMode).ContinueWith(c =>
            {
                if (c.IsFaulted)
                {
                    var ex = c.Exception.InnerException as KeeperException;
                    if (ex == null || ex.Error != Data.ZoookError.NODEEXISTS)
                    {
                        source.TrySetException(c.Exception.InnerException);
                        return;
                    }
                }
                TryCreate(zk, nodes, index + 1, source);
            });
        }