Есть вот такой код:
public IEnumerable<NodeBase> GetServerSpace(IsoConnectionParameters connectionParameters)
{
_isWait = true;
var worker = new Scsm_MMS_Worker(new Env());
Task.Factory.StartNew(() =>
{
worker.Start(connectionParameters, ReturnIedTree, string.Empty);
while (_isWait)
{
}
}).Wait();
worker.Stop();
return _node;
}
private bool _isWait;
В режиме Debug, данный код работает нормально и return вызывается. Но в режиме релиз, цикл while никогда не завершается, и работает бесконечно. Но если в тело цикла while добавть Trace.WriteLine(""), то код тоже отрабатывает хорошо.
public IEnumerable<NodeBase> GetServerSpace(IsoConnectionParameters connectionParameters)
{
_isWait = true;
var worker = new Scsm_MMS_Worker(new Env());
Task.Factory.StartNew(() =>
{
worker.Start(connectionParameters, ReturnIedTree, string.Empty);
while (_isWait)
{
Trace.WriteLine("");
}
}).Wait();
worker.Stop();
return _node;
}
Почему так делает оптимизатор, и как можно все-таки выполнить код нормально не используя Trace.WriteLine в теле цикла?