[英]Async method in an ASP.NET Web Form
我必须在 ASP.NET web forms 应用程序中使用第三方库。
我必须使用的第三方方法是异步方法。
由于我必须在页面点击事件处理程序中调用它,我有 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.