繁体   English   中英

ASP.NET Web 表单中的异步方法

[英]Async method in an ASP.NET Web Form

我必须在 ASP.NET web forms 应用程序中使用第三方库。

我必须使用的第三方方法是异步方法。

由于我必须在页面点击事件处理程序中调用它,我有 2 个选项:

  1. 将必须使用此方法的每个页面声明为 <%@ Page Async="true"... %>
  2. 同步调用方法。

第一个问题

仅为此方法声明所有网站页面异步是否有意义(可能可以在每个页面上调用)?

第二个问题

第二个问题是关于同步调用异步方法。

必须调用以下方法

async Task<bool> MyMethodAsync()
{
    ...
}

接下来的 3 次调用之间有什么区别?

Task.Run(async () => await MyMethodAsync()).GetAwaiter().GetResult();
Task.Run(() => MyMethodAsync()).GetAwaiter().GetResult();
MyMethodAsync().GetAwaiter().GetResult();

我在执行过程中看不到任何区别……

谢谢!

Task.Run(async () => await MyMethodAsync()).GetAwaiter().GetResult();

这将启动一个任务以在异步运行该方法的线程池线程上运行。 然后主线程坐在那里等待线程池线程任务完成。

Task.Run(() => MyMethodAsync()).GetAwaiter().GetResult();

这与上面相同,但主要 function 在方法完全完成之前“继续”。

MyMethodAsync().GetAwaiter().GetResult();

这至少避免了使用额外的线程来停止主线程。

编辑:我没有看到这个问题:

仅为此方法声明所有网站页面异步是否有意义(可能可以在每个页面上调用)?

取决于什么样的async 如果他们仍然返回 void,那么您将一无所获,您只是在破坏您的代码库。 如果您要返回实际的Task ,那么可以确定。 事实上,这就是 ASP.Net Core 的工作方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM