当我尝试调试此应用程序时,以下代码将是阻止
await Task.Delay(TimeSpan.FromSeconds(1.5));
在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;
}
}
答案 0 :(得分:3)
参考:Async/Await - Best Practices in Asynchronous Programming
在控制台应用程序中,它运行良好。有没有人知道是什么导致了这个
注意:不要混用阻塞和异步代码
例外:控制台主要方法
“始终异步”意味着你不应该混合同步和 异步代码没有仔细考虑后果。在 特别是,通过调用阻止异步代码通常是个坏主意 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;
}