c# - 等待后的代码在异步函数(网络表单)中无法按预期工作

标签 c# asp.net asynchronous webforms async-await

我对使用 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/

相关文章:

C#反序列化已移动或重命名的类

c# - 需要用C#写的RPC调用例子

c# - 我们可以在 asp.net c# web 应用程序中嵌入对 twitter、linkedin、facebook、buzz 的授权吗?

c# - 如何防止根据条件执行 Controller 操作?

javascript - Promise 返回数据 '<pending>'

c# - 通过 <tab> 接收焦点时修改按钮样式,但在单击时不修改

c# - 使用身份提供者在 asp.net mvc 4 应用程序中添加角色

ASP.net 模拟适用于已发布的 Intranet 站点,但不适用于 localhost

grails - 如何在另一个异步线程中使用 grails 模板渲染方法

c# - 我如何处理不想等待的异步任务?