C# 在ASP.NET内核中阻止异步代码可能有哪些缺点?
ASP.NET核心没有同步上下文,这将允许在没有死锁的情况下阻止异步方法C# 在ASP.NET内核中阻止异步代码可能有哪些缺点?,c#,asp.net,.net-core,C#,Asp.net,.net Core,ASP.NET核心没有同步上下文,这将允许在没有死锁的情况下阻止异步方法 public void Save(entity) { if (_repository.ExistsAsync(entity.Name).Result) { _repository.SaveNewAsync(entity).Wait(); } } 我是从完整的.NET框架中来到ASP.NET Core的,由于可能的死锁,在那里您不得不到处使用async wait。因此,阅读一段阻止异
public void Save(entity)
{
if (_repository.ExistsAsync(entity.Name).Result)
{
_repository.SaveNewAsync(entity).Wait();
}
}
我是从完整的.NET框架中来到ASP.NET Core的,由于可能的死锁,在那里您不得不到处使用async wait
。因此,阅读一段阻止异步方法的代码让我感到不舒服。但我不能提出反对阻塞代码的论点,因为它是有效的
问题:在ASP.NET内核中阻止异步代码可能有哪些缺点
async
/await
的引入是为了帮助人们在明确使用承诺(Task
s)时,在不使用所有回调意大利面条的情况下释放异步代码的威力。人们认识到,为了使我们的系统获得最佳性能,我们必须使异步活动成为一流的
async
/await
在不受任何类型的单线程(或逻辑等效)上下文约束的情况下工作得最好;相反,在任何线程都和其他线程一样好的情况下,完成现在准备好进行的工作。如果有一些“受祝福的”线程(UI线程)或一些同步要求(ASP.Net的会话和各种其他上下文),您可以轻松地结束排队工作,以防它需要利用这些上下文(当然,如果您使用的是异步,您可以尝试通过configurewait
退出)
Asp.Net核心是对Asp.Net概念的重建,但没有太多的隐含上下文,允许它成为“自由线程”。这是为了让我们充分利用异步的强大功能
它不是免费线程,只是为了我们可以阻止线程。您现在可以在asp.net内核中编写可能会导致“经典”asp.net死锁的代码,这并不是编写此类代码的许可证。这仍然不是一个好主意