我們已經實現了應用程序,其中我們需要處理傳入批次。例如,一組特定對象類型的請求必須發送到特定的web服務以使其處理並行Foreach webservice調用
我們已經實現了以下代碼段來執行此操作。需要你的幫助/指導,如果有wouldbe在同一
var options = new ParallelOptions { MaxDegreeOfParallelism = 10 };
Parallel.ForEach(request, options, currentRequest =>
{
ProcessedRequest processedRequest = null;
try
{
currentRequest.DBSave = true;
processedRequest = CommunicateToService(currentRequest);
}
catch (Exception ex)
{
ExceptionManager.HandleException(ex);
}
});
裏面CommunicateToservice方法,我們將調用服務,並通過該請求並得到響應對象,並保存到MS SQL數據庫大約爲10 -15表的任何缺陷。整個方法用AggregateException封裝。
需要輸入如何確定MaxDegreeOfParallelism值。
如果這確實處理了一批相似的項目,那麼您可能希望將該批處理與該服務進行一次通信並讓該服務處理多線程。也許甚至可以使用批處理的sql,因此它在一個單獨的進程中,但仍然比線程更快。線程化,特別是如果每個線程都在繁重的工作中,並不比通常的批處理更快。 – nvoigt
Communicatetoservice方法調用外部服務進行響應,並在到達時將其保存到數據庫。我的意思是方法可以處理多線程 – Sarav
也許在一個批處理中發送所有請求會更快,讓他們處理並將它們一次保存到數據庫中。對於大多數數據庫,有非常高效的批處理API,並且您沒有多個服務調用的開銷。但只有你能知道這是否會更快。 – nvoigt