首页 > 解决方案 > Async/Await 在 Windows 窗体应用程序中工作,但它不应该

问题描述

基于MSDN 文章,以下代码在 Windows 窗体应用程序中不应该工作,我非常确定,它过去不能工作,但最近我发现,在 .NET 框架 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。

标签: c#.netwinformsasynchronous

解决方案


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


二三
_

Four,并且Five永远不会显示。对我来说,这似乎是“没有按预期工作”,因为执行await Task.Delay(1000);是阻塞的。


推荐阅读