2009-10-10 39 views
0

我正在編寫的C#應用​​程序的一部分需要從服務提供者的數據庫爲與用戶關聯的每個帳戶收集數據。當用戶登錄到應用程序時,會進行調用以開始更新服務提供商數據庫中的帳戶。由於許多操作都是在第三方的最後執行的,因此獲取其信息的過程可能需要一段時間,所以我不想等待每個帳戶開始更新過程。我的問題是,是否有任何問題(可能是線程問題)在循環內調用異步方法?循環內的回調(異步方法調用)

回答

5

唯一的循環特定的問題是,如果您使用引用循環變量的匿名方法,則每次在循環周圍都會創建一個匿名方法對象的實例,但它們都將引用相同的循環變量,所以他們會看到它在循環執行時改變它的值。因此,在循環內創建一個循環變量的副本。

foreach (var thing in collection) 
{ 
    var copy = thing; 

    Action a =() => 
       { 
        // refer to copy, not thing 
       } 
} 

2017-04-25:順便說一句,這個問題是由C#5.0解決的。 foreach自動執行上述轉換。

1

循環沒有問題,但也可能會啓動(也)很多線程。看看你的要求是否允許使用the ThreadPool