示例#1
0
 private Task ProcessInProcess()
 {
     return(Task.Factory.StartNew(state =>
     {
         if (!((InternalStop)state).Value)
         {
             EmailMessage message = null;
             while (InProcessQueue.Dequeue(out message) && !((InternalStop)state).Value)
             {
                 try
                 {
                     RealTimeQueue.Enqueue(message);
                     MailClient.Send(message);
                     SuccessQueue.Enqueue(message);
                     Thread.Sleep((int)(1000 * MailSettings.SmtpInterval));
                 }
                 catch (Exception)
                 {
                     FailureQueue.Enqueue(message);
                     throw;
                 }
                 finally
                 {
                     RealTimeQueue.Dequeue(out message);
                 }
             }
         }
     }, Stopped, TaskCreationOptions.AttachedToParent | TaskCreationOptions.LongRunning));
 }
        public IQueue Create(string name)
        {
            InProcessQueue queue;

            lock (_lock)
            {
                if (_queues.ContainsKey(name))
                {
                    queue = _queues[name];
                }
                else
                {
                    queue = new InProcessQueue(name);
                    _queues.Add(name, queue);
                }
            }

            return queue;
        }
示例#3
0
 private Task ProcessBacklog()
 {
     return(Task.Factory.StartNew(state =>
     {
         if (!((InternalStop)state).Value)
         {
             EmailMessage message = null;
             while (BacklogQueue.Dequeue(out message) && !((InternalStop)state).Value)
             {
                 try
                 {
                     InProcessQueue.Enqueue(message);
                 }
                 catch (Exception)
                 {
                     FailureQueue.Enqueue(message);
                     throw;
                 }
             }
         }
     }, Stopped, TaskCreationOptions.AttachedToParent));
 }
示例#4
0
 public Task Scan()
 {
     Stopped.Value = false;
     return(Task.Factory.StartNew(state =>
     {
         if (!((InternalStop)state).Value)
         {
             BacklogQueue.Scan();
             InProcessQueue.Scan(); // for directly insert data to db
             if (_firstRun)
             {
                 _firstRun = false;
                 RealTimeQueue.Scan();
                 EmailMessage message;
                 while (!((InternalStop)state).Value && RealTimeQueue.Dequeue(out message))
                 {
                     InProcessQueue.Enqueue(message);
                 }
             }
         }
     }, Stopped, TaskCreationOptions.AttachedToParent));
 }