2013-02-26 142 views
5

मेरे पास एकीकरण परीक्षण है जो एकाधिक धागे का उपयोग करता है। मैं चाहता हूं कि कोई धागा परीक्षण में विफल हो सके (और बाकी को फाड़ें)। हालांकि, एक पृष्ठभूमि धागे पर एक अपवाद विफल MSTest का कारण बनता है - तो आप बस कोई त्रुटि मिलती है:पृष्ठभूमि धागे से एक एमएसटीएस्ट विफल

The agent process was stopped while the test was running

मैं मैं पृष्ठभूमि धागे पर किसी भी अपवाद पकड़ सकते थे लगता है, और परीक्षण विफल मुख्य थ्रेड जगा है, लेकिन है वहाँ एक आसान/अधिक सुरुचिपूर्ण तरीका है?

+1

आप जब तक पृष्ठभूमि धागा पूरा कर लिया है "मुख्य" धागा (परीक्षण धावक धागा) ब्लॉक करने के लिए होगा - तो परीक्षण धावक धागे पर 'Assert' के साथ विफल । यदि आप इस धागे को अवरुद्ध नहीं करते हैं, तो पृष्ठभूमि थ्रेड पूरा होने से पहले धावक बाहर निकल सकता है। यदि आप जो भी कोशिश कर रहे हैं उसका एक उदाहरण प्रदान करते हैं, तो कोई आपको शायद एक विकल्प दे सकता है। –

उत्तर

0

आप पूरी तरह आप एक TaskTaskCreationOptions.LongRunning साथ विकल्प जो कि कार्य (और नहीं ThreadPool से एक) के लिए एक समर्पित धागा पैदा करेगा इस्तेमाल कर सकते हैं अलग धागे (और नहीं एक ThreadPool एक) का उपयोग करने की जरूरत है। फिर आप उस कार्य के IsFaulted और Exception गुणों की जांच कर सकते हैं। यह है कि के लिए एक सरल कोड है:

var task = new Task(() => { throw new InvalidOperationException(); }, TaskCreationOptions.LongRunning); 
task.Start(); 
try { task.Wait(); } 
catch { } 

if (task.IsFaulted) 
{ 
    // do something about the exception 
    Console.WriteLine(task.Exception); 
}