[英]Running Different Stored Procedures in Parallel in EF6
我有許多不同的存儲過程,我想在並行啟動,以提高我的MVC Web應用程序的性能。 這些存儲過程從多個源收集信息並返回不同的數據類型。 為簡單起見,假設我只有兩個,返回不同的復雜數據類型:
等等....
我可以做其中一個數字,但它會在一系列中解雇它們:
List<usp_Task1> taskOneResult = await db.usp_Task1(parms).AsQueryable()
.ToListAsync();
List<usp_Task2> taskTwoResult = await db.usp_Task2(parms).AsQueryable()
.ToListAsync();
我見過的解決方案使用await Task.WhenAll()
並傳入一組任務,但我的是具有不同返回類型的任務。 那么在處理不同的復雜返回類型時,如何並行激發多個存儲過程呢?
更新 - 5/20/2015
最后得到了一個可行的解決方案,我相信它是並行處理所有任務的。 我不得不使用Task.Factory.StartNew()
命令將每個函數創建為要傳遞給Task.WaitAll()
的任務。
我把所有這些都打包成了一個新類,它包含了我正在使用的每個存儲過程返回類型的List<>
,允許我處理我的所有業務邏輯。 構造函數中的代碼看起來有點像這樣:
var task1 = Task.Factory.StartNew(() => CallStoredProc1(parms));
var task2 = Task.Factory.StartNew(() => CallStoredProc2(parms));
var taskList = new List<Task> { task1, task2 };
Task.WaitAll(taskList.ToArray());
CallStoredProc1()
和CallStoredProc2()
是私有的void方法,我在那里執行存儲過程調用並處理數據轉換。
非常感謝任何反饋!
想我會將我的更新重新發布為解決方案。
最后得到了一個可行的解決方案,我相信它是並行處理所有任務的。 我不得不使用Task.Factory.StartNew()
命令將每個函數創建為要傳遞給Task.WaitAll()
的任務。
我把所有這些都打包成了一個新類,它包含了我正在使用的每個存儲過程返回類型的List<>
,允許我處理我的所有業務邏輯。 構造函數中的代碼看起來有點像這樣:
var task1 = Task.Factory.StartNew(() => CallStoredProc1(parms));
var task2 = Task.Factory.StartNew(() => CallStoredProc2(parms));
var taskList = new List<Task> { task1, task2 };
Task.WaitAll(taskList.ToArray());
CallStoredProc1()
和CallStoredProc2()
是私有的void方法,我在那里執行存儲過程調用並處理數據轉換。
非常感謝任何反饋!
Task.WhenAll
支持您擁有的Task
輸入。 因此,首先使用Task.WhenAll
確保完成所有任務。 然后,使用Task.Result
從所有任務中獲取實際結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.