public IScheduler GetCurrentScheduler()
        {
            MathContext ctx       = MathContext.Current;
            Guid        currentId = ctx.InstanceId;

            lock (_schedulerStack)
            {
                IScheduler scheduler;
                if (_schedulerStack.TryGetValue(ctx.InstanceId, out scheduler))
                {
                    return(scheduler);
                }
                while (ctx.HasParent)
                {
                    ctx = ctx.ParentContext;
                    if (_schedulerStack.TryGetValue(ctx.InstanceId, out scheduler))
                    {
                        return(scheduler);
                    }
                }
                scheduler = new ImmediateScheduler();
                _schedulerStack.Add(currentId, scheduler);
                return(scheduler);
            }
        }
        public IScheduler GetCurrentScheduler()
        {
            MathContext ctx = MathContext.Current;
            Guid currentId = ctx.InstanceId;

            lock(_schedulerStack)
            {
                IScheduler scheduler;
                if(_schedulerStack.TryGetValue(ctx.InstanceId, out scheduler))
                    return scheduler;
                while(ctx.HasParent)
                {
                    ctx = ctx.ParentContext;
                    if(_schedulerStack.TryGetValue(ctx.InstanceId, out scheduler))
                        return scheduler;
                }
                scheduler = new ImmediateScheduler();
                _schedulerStack.Add(currentId, scheduler);
                return scheduler;
            }
        }