我对使用 asynch
感到很困惑与 webform
,我在 asp.net 服务器端为按钮创建了 onClick 函数,在这个函数中我创建了另一个函数,这个函数是 asynch
并返回它的类型 Task<int>
,在这个函数中我放了Task.Run
它运行一些代码,我用它来等待,等待完成后我想更改我的 UI 中的标签文本但是完成等待后 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
功能完全正常。
最佳答案
处理函数 btn_click() 定义为 void。就 ASP.NET 而言,当此函数存在时,处理程序函数被认为已完成并完成。 ASP.NET 将立即向浏览器发送响应。它不知道 fun() 内部发生的任何事情,它实际上创建了一个任务并将其排队等待执行。
为了让它工作,btn_click 必须写成
protected async Task btn_click(object sender , EventArgs e)
{
await fun();
}
Task的返回类型告诉ASP.Net它的执行结果会在任务中。您应该等待该任务完成,获取其结果,并根据结果向浏览器发送响应。
关于c# - 等待后的代码在异步函数(网络表单)中无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45658791/