我在ssis包中有一個c#腳本任務,用於通過我公司的專有系統對數據進行地理編碼。它目前的工作原理是這樣的:用c#API調用發送和返回變量?
1)拉取地址的查詢並放入數據表 2)循環遍歷該表和Foreach行,建立請求,發送請求,等待響應,然後插回數據庫。
問題是,每次調用都需要永久返回,因爲在出去並在api端獲得新地址之前,它會檢查當前數據庫(字符串匹配)以確保地址不存在。如果不存在,那麼就出去從我的服務中獲取新的數據。
因爲我一次只做一個,所以當我返回將其插入數據庫時,可以很容易地將ID字段保留在記錄中。
現在出現了問題...我被告知將其配置爲多線程或異步。這裏是頁面我在這裏閱讀關於這個話題: ASP.NET Multithreading Web Requests
var urls = new List<string>();
var results = new ConcurrentBag<OccupationSearch>();
Parallel.ForEach(urls, url =>
{
WebRequest request = WebRequest.Create(requestUrl);
string response = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
var result = JsonSerializer().Deserialize<OccupationSearch>(new JsonTextReader(new StringReader(response)));
results.Add(result);
});
也許我想這個毛病,但如果我送2個請求(A & B)和讓說乙實際上返回第一,我怎樣才能確保當我回去更新我的數據庫時,我正在更新正確的記錄?我可以通過API調用發送ID並返回它嗎?
我的想法是創建一個請求數組,在不等待響應的情況下通過它們進行刻錄,並將這些值返回到另一個數組中,然後我將在插入語句中循環。
這是一個很好的方法來解決這個問題嗎?我從來沒有使用Parrallel.ForEach,我發現的所有信息對我來說太過技術化,無法將其視覺化並應用於我的情況。
想知道爲什麼你使用'WebRequest'而不是'HttpClient' –
它看起來像這個代碼發送兩次完全相同的請求,所以你應該得到兩次完全相同的答案。所以,如果是相同的迴應,誰會關心A和B的順序。任何機構是否真的測試過這些代碼?你有一個列表url,但它永遠不會用在ForEach中。那麼這段代碼實際發送了什麼消息。 – jdweng