我有一个在生产中运行良好的应用程序,但我想知道我是否可以更好地实现并发......
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.Run
、Delegate.BeginInvoke
、ThreadPool.QueueUserWorkItem
>、new Thread
或其他任何内容。
您不应该在 ASP.NET 地址空间内运行冗长的后台线程操作,该操作的生命周期跨越多个 HTTP 请求。虽然实现起来相对容易,但这种方法可能会在 IIS 可维护性、可扩展性和安全性方面存在问题。为此创建一个 WCF 服务并从 ASP.NET 页面调用它:
关于asp.net - ASP.NET 中的线程、TPL 与异步委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21868933/