我正面臨一個我似乎無法控制我的頭的問題。斷點未命中且代碼未執行?
private void IndexEntityType(Type targetType, bool onlyNew)
{
Logger.Debug("generating index for {0}", targetType);
using (var wrapper = SessionWrapper.For(targetType, true))
{
var session = wrapper.Session;
session.FlushMode = FlushMode.Never;
session.CacheMode = CacheMode.Ignore;
var entities = GetEntities(targetType, onlyNew, session);
Logger.Debug("Indexing {0} entities", entities.Count);
// Create a Full Text session.
using (var fullTextSession = Search.CreateFullTextSession(session))
using (var transaction = fullTextSession.BeginTransaction())
{
fullTextSession.CacheMode = CacheMode.Ignore;
foreach (var entity in entities)
{
fullTextSession.Index(entity);
}
try
{
transaction.Commit();
}
catch (Exception ex)
{
Logger.Error("could not commit fulltext session transaction", ex);
}
}
Logger.Debug("generated index for {0}", targetType);
}
ReQueueTimers(onlyNew);
}
我試圖調試這一點,並設定在第一行(Logger.Debug)和最後一行(ReQueueTimers)斷點。
但是,在單步執行代碼時,最後一次調用(ReQueueTimers(onlyNew))從不會被調用,也不會觸及斷點。怎麼可能?編譯器是否「在優化時將其刪除」?
有沒有人有什麼暗示什麼可能會觸發這種行爲?
編輯:這是運行在多個線程,如果這可能與它有任何關係。
好的,試過了,我確實得到了一些處理的異常,但沒有任何會破壞代碼的東西,據我所知。當步進時,它實際上在ReQueueTimers()(最後一個})之前行。我只是意識到,它一定是實際拋出異常的包裝器的設置......感謝提示! – jishi 2010-12-17 09:51:56
如果拋出任何異常,那麼try語句代碼就不會發生,那麼代碼中的任何異常都會導致錯誤的行爲。 – 2010-12-17 18:29:01