asp.net - ASP.NET 中的线程、TPL 与异步委托(delegate)

标签 asp.net io delegates task-parallel-library datareader

我有一个在生产中运行良好的应用程序,但我想知道我是否可以更好地实现并发......

ASP.NET .NET 4、C#

基本上,它会动态生成 n 个 sql 语句(目前约为 50 个),然后并发运行它们并将数据写入 .csv 文件。

编辑:首先,我创建一个线程来完成所有工作,以便页面请求可以返回。然后在那条线上...

对于每个 SQL 语句,我使用 TPL 创建一个新任务,并使用数据读取器执行它,并将数据写入磁盘。创建最后一个文件后,我将一些摘要数据写入摘要文件并将其全部压缩并将其提供给用户。

我应该使用线程还是异步委托(delegate)?

我还没有发布代码,因为我真的只是想知道我的整体方法(即 TPL)是否是这种情况下的最佳选择。

请不要向我讲授如何创建动态 SQL,这是完全必要的,因为我正在读取的数据库的技术细节与问题无关。 (它是专有系统的后端。有 7000 多个表)。

最佳答案

Should I have used Threads or Asynchronous Delegates instead?

显然,您的后台线程操作跨越了单个 HTTP 请求的边界。在这种情况下,使用什么 API 来运行此类操作并不重要:Task.RunDelegate.BeginInvokeThreadPool.QueueUserWorkItem >、new Thread 或其他任何内容。

您不应该在 ASP.NET 地址空间内运行冗长的后台线程操作,该操作的生命周期跨越多个 HTTP 请求。虽然实现起来相对容易,但这种方法可能会在 IIS 可维护性、可扩展性和安全性方面存在问题。为此创建一个 WCF 服务并从 ASP.NET 页面调用它:

How to: Host a WCF Service in a Managed Windows Service .

关于asp.net - ASP.NET 中的线程、TPL 与异步委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21868933/

相关文章:

c# - 匿名方法和委托(delegate)

c# - .Net 组件将所有主要文件格式转换为 PDF

java - Java 8 中有委托(delegate)吗?

c# - 文件名中的空格导致问题

java - 尝试使用 java file-io 在 Linux 上创建文件?

java - 解释 Scanner close( ) 方法 Java

c - 在c中打印出数据文件是完全错误的

iphone - 我如何创建一个循环来检查每次迭代时是否有新的 IBAction 输入?

asp.net - 对于这种情况,我应该研究哪个 PayPal API?

c# - AppFabric 无法从重启中恢复