为什么这个任务挂起?

Mir*_*rek 2 c# task

[TestMethod]
public void Y()
{
    int i = 0;
    new Task(() => i++).Wait();

    Assert.AreEqual(1, i);
}
Run Code Online (Sandbox Code Playgroud)

出于什么原因,上述示例中的任务永远等待?我应该怎么Wait()做任务,所以它不挂?

Ren*_*ogt 8

你没有启动Task.试试这个:

[TestMethod]
public void Y()
{
    int i = 0;
    Task task = new Task(() => i++);
    task.Start();
    task.Wait();
    Assert.AreEqual(1, i);
}
Run Code Online (Sandbox Code Playgroud)

甚至更好(如Damien所建议)使用Task.Run():

[TestMethod]
public void Y()
{
    int i = 0;
    Task.Run(() => i++).Wait();
    Assert.AreEqual(1, i);
}
Run Code Online (Sandbox Code Playgroud)

  • 或者更好,养成使用`Task.Run`创建热门任务的习惯. (2认同)