2013-02-26 35 views
5

Tôi có một thử nghiệm tích hợp sử dụng nhiều luồng. Tôi muốn bất kỳ chủ đề để có thể thất bại trong thử nghiệm (và xé phần còn lại). Tuy nhiên, một ngoại lệ trên một sợi nền gây MSTest thất bại - bạn chỉ cần nhận được một lỗi:Không một MSTest từ chủ đề nền

The agent process was stopped while the test was running

Tôi cho rằng tôi có thể bắt bất kỳ trường hợp ngoại lệ về chủ đề nền, và thức dậy thread chính thất bại các kiểm tra, nhưng là có một cách dễ dàng hơn/thanh lịch hơn?

+1

Bạn sẽ phải ngăn chặn việc "chính" chủ đề (thread test runner) cho đến khi thread nền đã hoàn thành - sau đó thất bại với 'Assert' trên thread kiểm tra Á hậu . nếu bạn không chặn luồng này, nhân vật có thể thoát ra trước khi bạn hoàn thành chủ đề nền. Nếu bạn cung cấp một ví dụ về những gì bạn đã thử, ai đó có thể cung cấp cho bạn một sự thay thế. –

Trả lời

0

Nếu bạn hoàn toàn cần phải sử dụng chủ đề khác nhau (và không phải là một ThreadPool một), bạn có thể sử dụng một Task với TaskCreationOptions.LongRunning tùy chọn đó sẽ tạo ra một chủ đề dành riêng cho công tác đó (và không phải là một từ ThreadPool). Sau đó, bạn có thể kiểm tra các thuộc tính IsFaultedException của Tác vụ đó. Đây là một mã đơn giản cho rằng:

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); 
} 
Các vấn đề liên quan