在单独的线程中执行长动作是否安全?

时间:2015-12-14 19:33:21

标签: c# sql-server multithreading csv azure

我正在处理正在导入客户端的CSV文件。 该CSV应该包含一些信息,这些信息将用于在我公司的数据库的一个表中执行更新。 我的C#函数处理文件,查找错误,如果没有发现错误,它会发送一堆更新命令(文件通常在50到100000行之间)。 到目前为止,我在同一个线程中执行更新以执行更新(逐行),但它变得有点慢,具体取决于文件,因此我选择将所有SQL发送到Azure SQL队列(其中是一种获取大量"消息"并在数据库中再次运行SQL代码的服务),因此,客户端不必等待那么多动作才能执行。 它有点快,但仍然需要很长时间(由于对Azure SQL队列的请求)。所以我注意到将该操作放在一个单独的线程中并将所有SQL发送到我的Azure SQL队列。

但是我有点担心。在单独的线程中执行长操作真的很安全吗?它可靠吗?

1 个答案:

答案 0 :(得分:1)

第二个主题是100%,就像你曾经使用的主线程一样。我希望手边有一些权威的答案,但这是一种普遍的做法,人们不再写这些......

所以,是的,将工作卸载到第二个线程是安全的,并且可以通过大多数建议的方式来考虑它。

编辑1
好吧,如果您的线程在IIS上运行,您需要注册它,否则它将会死亡,因为一旦请求/响应周期结束,它将会终止它...