在C#中,当您覆盖方法时,允许在未使用原始方法的情况下进行覆盖异步。这似乎是糟糕的形式。
使我想到这一点的例子是这样-我是来协助进行负载测试问题的。在大约500个并发用户的情况下,登录过程将在重定向循环中分解。IIS正在记录异常,并显示消息“异步模块或处理程序在异步操作仍处于挂起状态时已完成”。一些搜索使我认为有人在滥用async void
,但是我快速搜索源却找不到任何东西。
可悲的是,当我本应寻找诸如“ async \ s [^ T]”之类的东西时,我正在搜索“ async \ svoid”(正则表达式搜索)(假设Task尚未完全合格……您明白了)。
后来我发现是async override void onActionExecuting(...
在基本控制器中。显然,这一定是问题所在。解决该问题(暂时使其同步)解决了该问题。
回到问题:为什么当调用代码永远无法等待覆盖时,为什么还要将覆盖标记为异步?
Task
。