【问题标题】:Can you use System.Data.Odbc Asynchronously with ASP.NET Core?您可以将 System.Data.Odbc 与 ASP.NET Core 异步使用吗?
【发布时间】:2019-12-20 05:46:15
【问题描述】:

对于我正在开发的应用程序,我不得不使用 ODBC 连接来访问数据库。我遇到的一个问题是我不确定如何甚至是否可以异步使用它。如果这真的不可能,有人知道可能的解决方法吗?

【问题讨论】:

标签: c# asp.net-core odbc


【解决方案1】:

多任务处理和 Web 服务器是一对奇怪的组合。

一方面,网络服务器会自动执行大规模多线程(通常每个连接 1 个线程)。并行的多个请求是令人愉快的并行。

另一方面,您不应该在服务器端使用多任务处理。 It is expected for a page 从头开始​​构建,根据请求填充,处理,渲染并尽快从内存中删除。您要么将页面保留在内存中的时间过长,要么在页面和与之相关的所有内容都被删除之前永远不会得到结果。

如果要完成任何多任务处理,则必须在客户端完成。通常使用一些 JavaScript。特别是 AJAX。然后,客户端甚至可以为此目的与特殊的 WebService 通信(因此 WebServer 对“真实”请求保持空闲。

【讨论】:

  • 这不是真的,链接指向五年前的文件。也没有真正回答任何关于异步或 ODBC 的问题
  • @SamiKuhmonen ASP.Net 页面生命周期是否发生了变化?因为我在原始 PHP 中也看到了同样的模式。 |它还通过指出起点错误来回答这个问题。您不在服务器中执行异步操作。你只需要让客户自己做。
  • 您肯定在需要时在服务器中异步。一路异步是一件大事,尤其是在这里,因为服务器可以在等待时释放线程来服务其他请求。当然,它要求任务不受 CPU 限制。客户端如何向数据库发出异步请求?它不能。
  • " 通常每个连接 1 个线程 - 自动。" - 哇。对不起,不行。这是不正确的,也是非常糟糕的建议。每个连接一个线程不会扩展到超过几百个并发连接 - 所有高性能或可扩展的 Web 应用程序都必须使用非阻塞 IO。在现代应用程序中,这意味着使用 async/await,但在此之前,我们必须在 Win32 上使用 Overlapped IO,在 Linux 上使用 epoll/select - 这种做法可以追溯到 几十年。 (每个线程至少需要几百 KB,请在 1990 年代后期尝试这样做,当时您只有 64MB RAM 可供使用)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
相关资源
最近更新 更多