ฉันพบปัญหากับ NUnit และ CallContext (โดยใช้ C#) โดยที่ NUnit กำลังคัดลอกสิ่งใด ๆ ในบริบทการโทรที่มีอยู่ซึ่งขยาย ILogicalThreadAffinative เมื่อมีการสร้างเธรดใหม่ ตัวอย่างเช่น ในตัวอย่างต่อไปนี้ จะมีข้อยกเว้นเกิดขึ้นในเธรดที่สร้างขึ้นใหม่เสมอ:
[Test]
public void TestCopiedCallContext()
{
Foo f = new Foo();
f.a = 1;
CallContext.SetData("Test", f);
new Thread(new ThreadStart(delegate()
{
if (CallContext.GetData("Test") != null)
{
throw new Exception("Bad!");
}
})).Start();
Thread.Sleep(500);
}
class Foo : ILogicalThreadAffinative
{
public int a;
}
หาก Foo ไม่ขยาย ILogicalThreadAffinative แสดงว่าการทดสอบผ่านไป ฉันใช้ .NET 2.0 (เนื่องจากข้อจำกัดอื่นๆ เราจึงไม่สามารถใช้ .NET เวอร์ชันที่ใหม่กว่าได้) ฉันได้ลองใช้แอตทริบิวต์ Requires* ที่มีอยู่ใน NUnit เวอร์ชันล่าสุดแล้ว แต่ก็ไม่ประสบความสำเร็จ ไม่มีใครรู้วิธีปิดพฤติกรรมนี้หรือไม่?