C# 等待不起作用
当我尝试调试这个应用程序时,下面的代码将被阻塞C# 等待不起作用,c#,winforms,async-await,C#,Winforms,Async Await,当我尝试调试这个应用程序时,下面的代码将被阻塞 await Task.Delay(TimeSpan.FromSeconds(1.5)); 在WinForm应用程序中 在控制台应用程序中,它运行良好。有没有人知道是什么原因造成的以及如何解决 public partial class Form1 : Form { public Form1() { InitializeComponent(); Run().Wait(); } publ
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;
}
}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
Run().Wait();
}
公共异步任务运行()
{
等待Run2();
}
公共静态异步任务Run2()
{
var task=task.FromResult(true);
等待任务延迟(时间跨度从秒(1.5));
返回等待任务;
}
}
参考:
在控制台应用程序中,它运行良好。有人知道这是什么原因吗
注意:不要混合使用块代码和异步代码
异常:控制台主方法
“一路异步”意味着您不应该混合使用同步和
没有仔细考虑后果的异步代码。在里面
特别是,通过调用
Task.Wait或Task.Result
如何解决呢
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;
}
}
使用异步事件处理程序
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;
}
public Form1(){
初始化组件();
此.Load+=已加载;
}
已加载公共异步void(对象发送方、事件args args){
等待运行();//非阻塞线程
}
公共异步任务运行(){
等待Run2();
}
公共静态异步任务Run2(){
var task=task.FromResult(true);
等待任务延迟(时间跨度从秒(1.5));
返回等待任务;
}
参考:
在控制台应用程序中,它运行良好。有人知道这是什么原因吗
注意:不要混合使用块代码和异步代码
异常:控制台主方法
“一路异步”意味着您不应该混合使用同步和
没有仔细考虑后果的异步代码。在里面
特别是,通过调用
Task.Wait或Task.Result
如何解决呢
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;
}
}
使用异步事件处理程序
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;
}
public Form1(){
初始化组件();
此.Load+=已加载;
}
已加载公共异步void(对象发送方、事件args args){
等待运行();//非阻塞线程
}
公共异步任务运行(){
等待Run2();
}
公共静态异步任务Run2(){
var task=task.FromResult(true);
等待任务延迟(时间跨度从秒(1.5));
返回等待任务;
}
“以下代码”。我猜你的意思是“我希望执行的下一行是……”。什么之后?调试时您看到了什么?我希望在await Run2()之后返回表单构造函数,因为await
会立即返回代码>?为什么人们产生线程/任务只是为了立即阻止?@oerkelens它的意思是,当你调试时,它就停在那一行。@MickyD这是为了测试。例如,在真实环境中,我们需要异步初始化数据库或任何东西。我们需要异步初始化数据库或任何东西。
-请参阅我的博客“下面的代码”。我猜你的意思是“我希望执行的下一行是……”。什么之后?调试时您看到了什么?我希望在await Run2()之后返回表单构造函数,因为await
会立即返回代码>?为什么人们产生线程/任务只是为了立即阻止?@oerkelens它的意思是,当你调试时,它就停在那一行。@MickyD这是为了测试。例如,在真实环境中,我们需要异步初始化数据库或任何东西。我们需要异步初始化数据库或任何东西。
-请参阅我的博客。