当我尝试调试此应用程序时,以下代码将被阻止
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)
在控制台应用程序中,它运行良好。有谁知道这是什么原因造成的
注意:不要混合阻塞和异步代码
例外:控制台主方法
“一路异步”意味着你不应该在没有仔细考虑后果的情况下混合同步和异步代码。特别是,通过调用 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)