Esempio n. 1
0
        public void RunSynchronously()
        {
            CleanUp();

            for (; ;)
            {
                var state = _provider.TryGetNextAvailableTask(out var newId);

                switch (state)
                {
                case TaskProviderState.Normal:
                    _provider.MarkAsRunning(newId);
                    try
                    {
                        _provider.RunTaskSynchronously(newId);
                    }
                    catch (Exception e)
                    {
                        _exceptions.Add(new TaskException <T>
                        {
                            Identifier     = newId,
                            InnerException = e
                        });
                    }
                    finally
                    {
                        _provider.MarkAsCompleted(newId);
                    }

                    break;

                case TaskProviderState.NoAvailableTask:
                    throw new InvalidOperationException();

                case TaskProviderState.AllComplete:
                case TaskProviderState.Abort:
                    return;

                default:
                    throw new ArgumentOutOfRangeException(nameof(state));
                }
            }
        }