Visual Studio 2017 C#Debug模式下因为调用层次过多导致StackOverFlowException
Visual Studio 2017
C# 工程
Debug模式下因为
函数调用层次过多导致StackOverFlowException
后来在一些位置使用了Task.Factory.StartNew
IVDataQueueProvider.GetAsync
public void GetAsync(Variety arg_vOption, Action<ErrorObject, IVDataQueue> arg_fnRet)
{
if(_dtQueue.ContainsKey(arg_vOption))
{
arg_fnRet(true, _dtQueue[arg_vOption]);
}
else
{
var uqueue = default(IDataQueue<MiniTickData>);
var oqueue = default(IDataQueue<MiniTickData>);
norlib.Algorithm.AsyncOneByOne(
last =>
{
if (last.IsTrue)
{
var ivqueue = new IVDataQueue(arg_vOption.Id, uqueue, oqueue, 0);
ivqueue.OpenAsync(new object(), eoi =>
{
if (eoi.IsTrue)
{
_dtQueue.Add(arg_vOption, ivqueue);
}
arg_fnRet(eoi, eoi.IsTrue ? ivqueue : null);
});
}
else
{
arg_fnRet(last, null);
}
},
next =>
{
_mtqp.GetAsync(arg_vOption, true, (eoi, qi) =>
{
oqueue = qi;
next(eoi);
});
},
next=>
{
//2018.11.07
//发现如果utqp内部没有在外部单独Cache
//而在此时读取DataCenterCache(MongoCache)
//在Debug情况下可能Stack过深导致StackOverFlowException
//所以这里采用Task来跳出Stack
Task.Factory.StartNew(() =>
{
_utqp.GetAsync(new UnderlyingInfo(this._underlying, arg_vOption.DeliveryYearMonth), (eoi, qi) =>
{
uqueue = qi;
next(eoi);
});
});
});
}
}