Async / Await可在Windows Form应用程序中使用,但不应该

时间:2018-07-10 12:43:24

标签: c# .net winforms asynchronous

基于MSDN article,以下代码在Windows Forms应用程序中不起作用,我可以肯定,它在过去不起作用,但是最近我发现,在.NET Framework 4.7中.02558有效。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public void Test()
    {
        Console.WriteLine("One");

        var d = DelayAsync();

        Console.WriteLine("Three");

        d.Wait();
        Console.WriteLine("Five");
    }

    private async Task DelayAsync()
    {
        Console.WriteLine("Two");

        await Task.Delay(1000);
        Console.WriteLine("Four");
    }

    private void Button1_Click(object sender, EventArgs e)
    {
        Test();
    }
}

我错过了一些发布日志,还是出了点问题(从用户的角度来看我是对的)?

编辑:因为在Windows窗体中使用CurrentContextSheduller,所以从等待的代码返回后,应用程序应该冻结。

2 个答案:

答案 0 :(得分:1)

在4.7.1上进行测试,我得到以下结果:

  

一个
  两个
  三个

FourFive永远不会显示。对我来说,这似乎“未按预期工作”,因为await Task.Delay(1000);的执行被阻止了。

答案 1 :(得分:0)

已发现。该问题是由ReSharper Build&Run引起的。由于某些原因,构建未完成,因此从ReSharper Build切换到Visual Studio生成程序的行为“正确”。 最新的构建是通过.ConfigureAway(false)完成的,因此这是它起作用但不起作用的根本原因。