【发布时间】:2021-10-14 20:49:18
【问题描述】:
我有一个 ASP.Net Framework (4.7) 表单应用程序。
所有页面都使用母版页模板。在文件后面的母版页代码中,我正在调用一个需要一些时间的函数(异步)
Site.Master.cs
public void Page_Load(object sender, EventArgs e)
{
Page.RegisterAsyncTask(new PageAsyncTask(LoadUserFromActiveDirectoryAsync));
}
public async Task LoadUserFromActiveDirectoryAsync()
{
var currentUser = await << some async method in different library >>;
CurrentUser = currentUser;
}
当我运行这个时,我得到一个错误:
此操作要求页面是异步的(Async 属性必须设置为 true)。
我知道我应该在我的应用程序的每个 aspx 文件中设置Async="true"。但是有没有办法我可以在母版页中设置这个选项?
Site.Master
<% Master
Language="C#"
AutoEventWireup="true"
CodeBehind="Site.master.cs"
Inherits="WebApp.SiteMaster"
Async="true" // this is not valid for Master Page
%>
【问题讨论】:
-
添加 await 无济于事!即使代码异步运行,你也有 await 理论上会等待!!!!因此,回发发生,页面到达服务器。您调用一些代码异步,然后等待等待,这将破坏整个目的!!!如果你等待,那么页面将在服务器上暂停,直到代码完成,所以你在这里获得零!!!只有当代码失败时,页面才会返回到客户端。因此,您可以启动另一个进程线程,但它与 UI 或该页面上的显示没有任何关系。在这里等待会破坏整个目标。
-
你要么等待,要么不等待?然后您可以将其他例程作为新任务/线程启动,但是如果该例程需要更改/更新/显示当前页面上的任何值,则无论如何您都必须等待!除非您的代码运行,否则网页不会返回给客户端。如果你进行异步调用,代码可以运行,但是一旦页面代码完成,它就会终止,并将页面发送到客户端。因此,如果该异步代码必须在当前页面上显示任何内容,则您必须等待,因此一无所获。请记住,一旦完成并将页面发送到客户端,页面类和代码就会超出范围
标签: asp.net master-pages