public void Enqueue(FileOperationBase operation)
 {
     lock (((ICollection)_queue).SyncRoot)
     {
         _queue.Enqueue(operation);
     }
     Task.Run(() => RunOperation());
 }
        private async void RunOperation()
        {
            while (true)
            {
                FileOperationBase operation;
                lock (((ICollection)_queue).SyncRoot)
                {
                    if (_currentOperation != null)
                    {
                        return;
                    }
                    if (_queue.Count == 0)
                    {
                        return;
                    }
                    operation = _queue.Dequeue();
                    if (operation.IsAborted)
                    {
                        continue;
                    }
                    _currentOperation = operation;
                }
                var success = await operation.Execute();

                lock (((ICollection)_queue).SyncRoot)
                {
                    _currentOperation = null;
                    if (!operation.IsAborted)
                    {
                        if (!success)
                        {
                            if (operation.TryCount > 0)
                            {
                                _queue.Enqueue(operation);
                            }
                        }
                    }
                }
                if (!success)
                {
                    Thread.Sleep(500);
                    continue;
                }
                OperationCompleted?.Invoke(this, new FileOperationEventArgs(operation));
                operation.Dispose();
            }
        }
示例#3
0
        private void _queue(FileOperationBase operation)
        {
            operation.ScheduledTime   = DateTime.UtcNow;
            operation.OperationStatus = FileOperationStatus.Waiting;
            Logger.Info("Operation scheduled: {0}", operation);
            switch (operation)
            {
            case IngestOperation _:
                _queueConvertOperation.Enqueue(operation);
                break;

            case ExportOperation _:
                _queueExportOperation.Enqueue(operation);
                break;

            case CopyOperation _:
            case DeleteOperation _:
            case LoudnessOperation _:
            case MoveOperation _:
                _queueSimpleOperation.Enqueue(operation);
                break;
            }
            OperationAdded?.Invoke(this, new FileOperationEventArgs(operation));
        }
示例#4
0
        public void FileNameProvided_ConsoleReaderReturned()
        {
            FileOperationBase result = (FileOperationBase)parser.Parse("/console");

            Assert.IsType <CommandLineReader>(result.Parent);
        }