我有一個是在生產運作良好的應用程序,但我不知道如果我能實現的併發更好....線程VS TPL VS異步委託在ASP.NET
ASP.NET .NET 4, C#
基本上,它會在運行中生成n個sql語句(目前大約爲50個),然後同時運行它們並將數據寫入.csv文件。
編輯:首先我創建一個線程來完成所有的工作,以便頁面請求可以返回。然後在該線程上...
對於每個SQL語句,我使用TPL創建一個新的Task,並使用DataReader執行它並將數據寫入磁盤。當創建最後一個文件時,我會將一些摘要數據寫入摘要文件並將其全部壓縮並提供給用戶。
我是否應該使用線程或異步代理?
我沒有發佈代碼,因爲我真的只是想知道我的整體方法(即TPL)是否是這種情況下的最佳選擇。
請不要教我關於創建動態sql,這是完全必要的,由於我閱讀的數據庫的技術性和與問題無關。 (它是專有系統的後端,擁有7000多張桌子)。
在對代碼進行任何更改之前,請確保您瞭解異步和多線程/多任務之間的區別。他們是不一樣的,你可能應該在你的情況下結合起來。 – MarcinJuraszek
在ASP.NET中執行'Task.Run'或'Task.Factory.StartNew'確實是一個糟糕的主意。在所有任務完成之前,HTTP請求將不會完成。你真的只會因此而傷害Web應用程序的可伸縮性。使用[異步SqlDataReader API](http://blogs.msdn.com/b/adonet/archive/2012/07/15/using-sqldatareader-s-new-async-methods-in-net-4-5-beta而是使用-part-2-examples.aspx)。 – Noseratio
@MarcinJuraszek我想我明白了兩個概念之間的區別。 :)你能否詳細說明一下?好處?所以也許在datareader上調用一些異步方法(沒有檢查是否有)。當我提到異步委託時,我想也許我應該做了一堆異步回調,每個sql查詢/寫一個,當它完成它壓縮.... – user2416689