基于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,所以从等待的代码返回后,应用程序应该冻结。
答案 0 :(得分:1)
在4.7.1上进行测试,我得到以下结果:
一个
两个
三个
Four
和Five
永远不会显示。对我来说,这似乎“未按预期工作”,因为await Task.Delay(1000);
的执行被阻止了。
答案 1 :(得分:0)
已发现。该问题是由ReSharper Build&Run引起的。由于某些原因,构建未完成,因此从ReSharper Build切换到Visual Studio生成程序的行为“正确”。
最新的构建是通过.ConfigureAway(false)
完成的,因此这是它起作用但不起作用的根本原因。