在 winform 中等待不起作用

0 c# winforms async-await

当我尝试调试此应用程序时,以下代码将被阻止

await Task.Delay(TimeSpan.FromSeconds(1.5));
Run Code Online (Sandbox Code Playgroud)

在 WinForm 应用程序中。

在控制台应用程序中,它运行良好。有没有人知道是什么导致了这个以及如何解决它?

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

    public async Task Run()
    {
        await Run2();
    }

    public static async Task<bool> Run2()
    {
        var task = Task.FromResult(true);
        await Task.Delay(TimeSpan.FromSeconds(1.5));
        return await task;
    }
}
Run Code Online (Sandbox Code Playgroud)

Nko*_*osi 5

参考:Async/Await - 异步编程的最佳实践

在控制台应用程序中,它运行良好。有谁知道这是什么原因造成的

注意:不要混合阻塞和异步代码

例外:控制台主方法

“一路异步”意味着你不应该在没有仔细考虑后果的情况下混合同步和异步代码。特别是,通过调用 Task.Wait 或 Task.Result 来阻止异步代码通常是一个坏主意。


以及如何解决?

使用异步事件处理程序。

public Form1() {
    InitializeComponent();
    this.Load += Loaded;
}

public async void Loaded(object sender, EventArgs args) {

    await Run();//Non blocking thread
}

public async Task Run() {
    await Run2();
}

public static async Task<bool> Run2() {
    var task = Task.FromResult(true);
    await Task.Delay(TimeSpan.FromSeconds(1.5));
    return await task;
}
Run Code Online (Sandbox Code Playgroud)