Esempio n. 1
0
        /// <summary>
        /// 设置值
        /// </summary>
        /// <param name="value">值</param>
        /// <param name="callback">返回回调</param>
        /// <returns>true设置成功, false 此对象已经停止工作了</returns>
        public bool Set(SET value, Action <RES> callback)
        {
            lock (lockObj)
            {
                if (Target == null)
                {
                    return(false);
                }

                if (State == FiberFlag.Complete)
                {
                    return(false);
                }

                ResCallbackModel tmp = new ResCallbackModel()
                {
                    ResCallBack = callback,
                    value       = value
                };



                SetQueue.Enqueue(tmp);


                return(true);
            }
        }
Esempio n. 2
0
        public bool ThreadRun()
        {
            lock (lockObj)
            {
                model = null;

                if (SetQueue.Count > 0)
                {
                    model = SetQueue.Peek();
                }
                else
                {
                    return(false);
                }



                if (model != null)
                {
                    Console.WriteLine("Id:" + System.Threading.Thread.CurrentThread.ManagedThreadId);

                    RES res = Resume(model.value);

                    if (model.ResCallBack != null)
                    {
                        model.ResCallBack(res);
                    }


                    if (state == FiberStateEnum.FiberStopped)
                    {
                        SetQueue.Clear();
                        State = FiberFlag.Complete;
                    }

                    SetQueue.Dequeue();

                    return(true);
                }
                SetQueue.Dequeue();
                return(false);
            }
        }