protected override void QueueTask(Task task) { if (_disposed) { throw new ObjectDisposedException(nameof(GrainTaskScheduler)); } lock (_sync) { _last = _last.ContinueWith(_ => { bool res = TryExecuteTask(task); if (task.IsFaulted) { _exceptionSink.Add(task.Exception); //need to distinguish between loose and handled exceptions } }, _cancelToken, TaskContinuationOptions.None, _outerScheduler); //catch exceptions also? } }