increment a count value outside parallel.foreach scope

后端 未结 4 843
一整个雨季
一整个雨季 2020-12-03 07:18

How can I increment an integer value outside the scope of a parallel.foreach loop? What\'s is the lightest way to synchronize access to objects outside parallel loops?

4条回答
  •  爱一瞬间的悲伤
    2020-12-03 07:44

    I like to beat dead horses! :)

    The "lightest" way to increment the count from multiple threads is:

    Interlocked.Increment(ref count);
    

    But as others have pointed out: if you're doing it inside Parallel.ForEach then you're probably doing something wrong.

    I'm suspecting that for some reason you're using ForEach but you need an index to the item you're processing (it will never work with Parallel.ForEach). Am I close? Why do you need the count? What sort of VooDoo magic are you trying to do?

    UPDATE:

    You seem to be safe with the ConcurrentDictionary if your key is the URI and the value is TAnswer. I don't see a problem as long as you don't try to use the count to reference elements in your collection.

    Finally...

    If you need a counter, then use the Parallel.For loop... it safely increments the counter for you.

提交回复
热议问题