在ASP.NET Core中阻止异步代码可能有哪些缺点



ASP.NET Core没有同步上下文,这将允许在没有死锁的情况下阻塞异步方法。

public void Save(entity)
{
if (_repository.ExistsAsync(entity.Name).Result)
{
_repository.SaveNewAsync(entity).Wait();
}
}

我是从完整的.NET框架中了解ASP.NET Core的,在那里,由于可能出现死锁,您不得不在任何地方使用async-await。因此,阅读一段阻塞异步方法的代码会让我感到不舒服。但我无法提出反对阻塞代码的论点,因为它是有效的。

问题:在ASP.NET Core中阻止异步代码可能有哪些缺点?

引入

async/await是为了帮助人们在显式使用promise(Tasks(时释放异步代码的威力,而不需要所有的回调意大利面条。人们认识到,为了使我们的系统获得最佳性能,我们必须使异步活动成为一流的。

async/await在不绑定到任何类型的单线程(或逻辑等效(上下文时效果最佳;相反,在任何线程都和其他线程一样好的情况下,完成现在可以处理的工作。如果有一些"幸运"线程(UI线程(或一些同步要求(ASP.Net的Session和各种其他上下文(,你可以很容易地将工作排成队列,以防它需要利用这些上下文(尽管如果您使用async,您当然可以尝试通过ConfigureAwait退出(。

Asp.Net核心是对Asp.Net概念的重建,但没有太多隐式上下文,并允许它成为"自由线程"。这是为了让我们能够充分利用异步的力量。

它不是免费线程的,只是为了阻止线程。您现在可以在asp.net核心中编写代码,而这将使"经典"asp.net陷入僵局,这并不是编写此类代码的许可证。这仍然不是一个好主意。

最新更新