Exemplo n.º 1
0
 /// <summary>
 /// 添加超时回调信息
 /// </summary>
 /// <param name="checkTimeout">是否超时判断</param>
 /// <param name="identity">超时判断标识</param>
 /// <param name="type">超时回调类型</param>
 internal void Add(object checkTimeout, int identity, callbackType type)
 {
     for (queueNode node = endNode; node.Add(checkTimeout, identity, type) == 0; node = endNode)
     {
         Monitor.Enter(endNodeLock);
         if (node == endNode)
         {
             Exception exception = null;
             try
             {
                 endNode.NextNode = queueNode.Get(timeoutTicks);
                 endNode          = endNode.NextNode;
             }
             catch (Exception error)
             {
                 exception = error;
             }
             finally { Monitor.Exit(endNodeLock); }
             if (exception != null)
             {
                 log.Error.Add(exception, null, false);
                 return;
             }
         }
         else
         {
             Monitor.Exit(endNodeLock);
         }
     }
     if (Interlocked.CompareExchange(ref isTask, 1, 0) == 0)
     {
         fastCSharp.threading.timerTask.Default.Add(this, thread.callType.TimeoutQueueCheck, date.Now.AddTicks(timeoutTicks));
     }
 }