一直在爲我的應用程序尋找多線程解決方案,但在嘗試時會隨機出現NullReferenceException
錯誤,而不是當我連續運行每一個時發生的一切,順利。使用Code-First EF的多線程ASP.net MVC3 EF
我正在做的是計算從一個地方到另一個地方的旅程,然後計算回程。返程旅程計算只是使用相同的過程,僅在出發地和目的地切換時進行。
這聽起來是可行的與多線程在一個實體框架的ASP.net MVC3應用程序?我看過一些文章,看起來EF似乎有問題,但這些聽起來像是在頁面上共享DBContexts時的問題,而我在所有需要訪問數據庫的地方使用Using語句。任何人有任何經驗嗎?
基本相關的代碼我到目前爲止是這樣的:
var outboundJourneyTask = Task.Factory.StartNew(() => BuildJourney(true));
var returnJourneyTask = Task.Factory.StartNew(() => BuildJourney(false));
Task.WaitAll(outboundJourneyTask, returnJourneyTask);
什麼我所希望的是,每個任務會重新開始,但由於空引用例外,我認爲在第二個線程,它試圖使用第一個構建的數組,當它找不到某些元素時,會拋出錯誤。
聽起來可能?任何人都知道這樣做的更好方法?
編輯:我想穿不同的方法(見下文),但也有很奇怪的事情與我的陣列發生 - 通過他們不同的循環,並引發錯誤
Thread t1 = new Thread(ThreadMethod1);
t1.Start();
Thread t2 = new Thread(ThreadMethod2);
t2.Start();
void ThreadMethod1(object state)
{
BuildJourney(false);
ManualResetEvent mre = (ManualResetEvent)state;
mre.Set();
}
void ThreadMethod2(object state)
{
BuildJourney(true);
ManualResetEvent mre = (ManualResetEvent)state;
mre.Set();
}
感謝
你的'BuildJourney'方法是怎樣的? –
它太大了,因爲它包含很多其他功能和計算,所以在這裏發佈太大了!處理需要大約7-10秒,這就是爲什麼我希望它們同時運行的原因。它包含幾個數據庫調用,幾個計算並返回視圖模型的通用列表。 –
但在這種情況下,如果我們不知道您的電話可以共享哪些資源,我們幾乎無法幫助您。 –