相关疑难解决方法(0)

发布模式下的无限循环

当我在调试模式下运行以下代码时,它将成功完成并退出.但是,如果我在发布模式下运行以下代码,它将陷入无限循环而永远不会完成.

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)

哪种优化导致它陷入无限循环?

.net c# multithreading

19
推荐指数
2
解决办法
1530
查看次数

多线程单元测试

我有一个 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)

c# multithreading unit-testing

7
推荐指数
2
解决办法
5662
查看次数

标签 统计

c# ×2

multithreading ×2

.net ×1

unit-testing ×1