0
我有一種方法解析屬於某個用戶的一些數據並將其保存到數據庫。如何在使用BeginInvoke進行多線程時鎖定資源?
delegate void parseUserDataDelegate(string pathToFile);
我爲它創建了一個委託並使用BeginInvoke進行呈現以進行並行處理。
parseUserDataDelegate deleg = new parseUserData(this.parseUserData);
IAsyncResult result = deleg.BeginInvoke(path, null, null);
deleg.EndInvoke(result);
問題是有兩個表 - 一個用於外鍵是用戶ID和另一個用戶表的數據。當解析時沒有相應的用戶時,該方法向用戶表中添加一個新條目並使用其ID。一個用戶的數據表中大約有100個條目。問題是,當處理第一個用戶的所有數據時,會出現錯誤,因爲兩個線程嘗試爲第二個用戶創建相同的條目。如何鎖定不同線程的用戶表訪問權限?
如果您立即調用BeginInvoke並緊接着EndInvoke,則不會有並行處理。調用EndInvoke的線程將等待操作完成。 – 2012-01-12 15:01:52
我建議你在做任何事務之前先檢查新用戶。插入它們,然後只在第二張桌子上工作......除非我錯過了一些你的邏輯 – Boomer 2012-01-12 15:03:38