我对asynch
与webform
的使用感到困惑,我在asp.net服务器端为按钮创建了 onClick 函数,在这个函数中我创建了另一个函数函数是asynch
并返回它的类型Task<int>
,在这个函数的一边,我把Task.Run
运行一些代码,我用它等待它,等待完成之后我想改变标签文本我的用户界面,但在完成等待后,UI中没有任何事情发生。
点击按钮代码:
protected void btn_click(object sender , EventArgs e)
{
fun();
}
异步函数代码:
public asynch Task<int> fun()
{
Task<String> s = Task.Run(()=>someCodeTakeTime());
await s;
lable.Text = "finish";
return 1;
}
我知道不建议在Task.Run
侧使用asynch
,而我的代码没有用,但我想从中了解asynch
函数的工作原理。< / p>
答案 0 :(得分:3)
处理函数btn_click()定义为void。就ASP.NET而言,当此函数存在时,处理函数被认为已完成并完成。 ASP.NET会立即将响应发送到浏览器。它不知道fun()中发生的任何事情,它实际上创建了一个任务并将其排队等待执行。
为了使其正常工作,必须将btn_click写为
protected async Task btn_click(object sender , EventArgs e)
{
await fun();
}
Task的返回类型告诉ASP.Net它的执行结果将在任务中。您应该等待该任务完成,获取其结果,并根据结果向浏览器发送响应。