Click here to Skip to main content
15,886,563 members
Home / Discussions / C#
   

C#

 
GeneralRe: ConcurrentList<T> Pin
Gerry Schmitz22-May-23 12:01
mveGerry Schmitz22-May-23 12:01 
GeneralRe: ConcurrentList<T> Pin
BillWoodruff22-May-23 11:38
professionalBillWoodruff22-May-23 11:38 
GeneralRe: ConcurrentList<T> Pin
Gerry Schmitz22-May-23 12:06
mveGerry Schmitz22-May-23 12:06 
AnswerRe: ConcurrentList<T> Pin
Richard Deeming21-May-23 21:05
mveRichard Deeming21-May-23 21:05 
GeneralRe: ConcurrentList<T> Pin
Richard Andrew x6422-May-23 6:28
professionalRichard Andrew x6422-May-23 6:28 
GeneralRe: ConcurrentList<T> Pin
Richard Deeming22-May-23 20:40
mveRichard Deeming22-May-23 20:40 
AnswerRe: ConcurrentList<T> Pin
jschell22-May-23 7:11
jschell22-May-23 7:11 
AnswerRe: ConcurrentList<T> Pin
lmoelleb26-May-23 2:55
lmoelleb26-May-23 2:55 
You could use ImmutableList as an alternative to locking.

1) Copy the reference to the list into a temporary variable used (not a field)
2) Call add/delete/whatever on your reference copy from step 1. Notice this will NOT update the original list but return a reference to a new list. Keep this result separate, do not override the reference you got in step 1.
3) Use Interlocked.CompareExchange to assign this new reference back to the place you got it from in step 1

If Interlocked.CompareExchange does not return the value you got in 1), then it means someone else altered the list at the same time you where doing it. You can take the returned value and run step 2) and 3) again (yes, all of this can be written as a somewhat readable loop).

This will avoid locks, but at the risk of running the list modification multiple times in case of conflict. If performance is important you would need to measure if this is faster than a simple lock. If both are fast enough, use whatever you find most readable.

If you are updating the list concurrently order is of course not guarantied - but it is guarantied multiple operations performed in step 2) above would be performed as an atomic operation - you will never access the list where it only contains some of the pending modifications.
GeneralRe: ConcurrentList<T> Pin
Richard Andrew x6431-May-23 13:22
professionalRichard Andrew x6431-May-23 13:22 
QuestionOpen Browser, Wait for Callback Pin
Kevin Marois19-May-23 6:43
professionalKevin Marois19-May-23 6:43 
AnswerRe: Open Browser, Wait for Callback Pin
Dave Kreskowiak19-May-23 7:08
mveDave Kreskowiak19-May-23 7:08 
GeneralRe: Open Browser, Wait for Callback Pin
Kevin Marois19-May-23 8:12
professionalKevin Marois19-May-23 8:12 
GeneralRe: Open Browser, Wait for Callback Pin
Gerry Schmitz19-May-23 8:46
mveGerry Schmitz19-May-23 8:46 
GeneralRe: Open Browser, Wait for Callback Pin
Dave Kreskowiak19-May-23 10:51
mveDave Kreskowiak19-May-23 10:51 
GeneralRe: Open Browser, Wait for Callback Pin
Gerry Schmitz20-May-23 4:00
mveGerry Schmitz20-May-23 4:00 
GeneralRe: Open Browser, Wait for Callback Pin
Dave Kreskowiak20-May-23 4:16
mveDave Kreskowiak20-May-23 4:16 
GeneralRe: Open Browser, Wait for Callback Pin
Kevin Marois22-May-23 13:46
professionalKevin Marois22-May-23 13:46 
GeneralRe: Open Browser, Wait for Callback Pin
Dave Kreskowiak22-May-23 18:31
mveDave Kreskowiak22-May-23 18:31 
AnswerRe: Open Browser, Wait for Callback Pin
Pete O'Hanlon21-May-23 4:58
mvePete O'Hanlon21-May-23 4:58 
QuestionSame void between multiple forms in the same project? Pin
Member 1405587917-May-23 7:01
Member 1405587917-May-23 7:01 
AnswerRe: Same void between multiple forms in the same project? Pin
jschell17-May-23 7:29
jschell17-May-23 7:29 
AnswerRe: Same void between multiple forms in the same project? Pin
OriginalGriff17-May-23 7:54
mveOriginalGriff17-May-23 7:54 
QuestionFunc<> Question Pin
Kevin Marois3-May-23 18:48
professionalKevin Marois3-May-23 18:48 
AnswerRe: Func<> Question Pin
Richard Deeming3-May-23 21:47
mveRichard Deeming3-May-23 21:47 
GeneralRe: Func<> Question Pin
Kevin Marois4-May-23 5:57
professionalKevin Marois4-May-23 5:57 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.