当我在调试模式下运行以下代码时,它将成功完成并退出.但是,如果我在发布模式下运行以下代码,它将陷入无限循环而永远不会完成.
static void Main(string[] args)
{
bool stop = false;
new Thread(() =>
{
Thread.Sleep(1000);
stop = true;
Console.WriteLine("Set \"stop\" to true.");
}).Start();
Console.WriteLine("Entering loop.");
while (!stop)
{
}
Console.WriteLine("Done.");
}
Run Code Online (Sandbox Code Playgroud)
哪种优化导致它陷入无限循环?
我有一个 C# 方法,将使用不同的线程多次调用该方法。所以我想创建一个单元测试来在多个线程上测试此方法,但我不确定我做得是否正确。
这是我没有线程的单元测试:
[TestMethod]
public void FromLocalPoints()
{
var projectedCoordinates = this.ConvertFromLocalPoints();
foreach (var projectedCoordinate in projectedCoordinates)
{
Debug.Write(projectedCoordinate.X);
Debug.Write("; ");
Debug.WriteLine(projectedCoordinate.Y);
}
}
Run Code Online (Sandbox Code Playgroud)
this.ConvertFromLocalPoints() 正在调用我想测试的实际方法。
我创建了一个委托、一个事件和一个处理程序:
public delegate void ReprojectCompleteHandler(IEnumerable<Coordinate> projectedCoordinates);
public event ReprojectCompleteHandler ReprojectCompleteEvent;
private void ReprojectHandler(IEnumerable<Coordinate> projectedCoordinates)
{
Debug.WriteLine("Conversion is complete");
}
Run Code Online (Sandbox Code Playgroud)
在我的 TestSetup 中,我监听我的事件:
[TestInitialize]
public void TestSetup()
{
this.ReprojectCompleteEvent += this.ReprojectHandler;
}
Run Code Online (Sandbox Code Playgroud)
我的单元测试是:
[TestMethod]
public void FromLocalPointsThreaded()
{
// Call FromLocalPoints multiple times in separate threads to check if it is thread safe
for …
Run Code Online (Sandbox Code Playgroud)