Пример #1
0
        protected override void QueueTask(Task task)
        {
            lock (_sync) {
                _taskCount++;
            }

            try {
                ThreadPool.QueueUserWorkItem(_ => {
                    try {
                        TryExecuteTask(task); //No exceptions thrown, as always packaged into task...

                        if (task.IsFaulted)
                        {
                            _exceptionSink?.Add(task.Exception);
                        }
                    }
                    finally {
                        DecrementTaskCount();
                    }
                });
            }
            catch (NotSupportedException) {
                DecrementTaskCount();
                throw;
            }
        }
Пример #2
0
 public static void SinkExceptions(this Task task, ExceptionSink sink)
 => task.ContinueWith(t => sink.Add(t.Exception), TaskContinuationOptions.OnlyOnFaulted);
Пример #3
0
 internal void Add(Exception ex)
 {
     _exceptions.Enqueue(ex);
     _inner?.Add(ex);
 }