Click here to Skip to main content
15,893,814 members
Home / Discussions / C#
   

C#

 
GeneralRe: C# features Pin
Calin Negru28-May-23 4:16
Calin Negru28-May-23 4:16 
GeneralRe: C# features Pin
Gerry Schmitz28-May-23 4:52
mveGerry Schmitz28-May-23 4:52 
GeneralRe: C# features Pin
Calin Negru29-May-23 2:39
Calin Negru29-May-23 2:39 
GeneralRe: C# features Pin
PIEBALDconsult26-May-23 4:57
mvePIEBALDconsult26-May-23 4:57 
GeneralRe: C# features Pin
OriginalGriff26-May-23 11:36
mveOriginalGriff26-May-23 11:36 
GeneralRe: C# features Pin
PIEBALDconsult26-May-23 11:42
mvePIEBALDconsult26-May-23 11:42 
AnswerRe: C# features Pin
Richard MacCutchan26-May-23 1:04
mveRichard MacCutchan26-May-23 1:04 
GeneralRe: C# features Pin
Calin Negru26-May-23 21:37
Calin Negru26-May-23 21:37 
AnswerRe: C# features Pin
BillWoodruff26-May-23 19:42
professionalBillWoodruff26-May-23 19:42 
GeneralRe: C# features Pin
Calin Negru29-May-23 6:05
Calin Negru29-May-23 6:05 
QuestionGoogle API Authentication in a WPF App Pin
Kevin Marois22-May-23 14:04
professionalKevin Marois22-May-23 14:04 
AnswerRe: Google API Authentication in a WPF App Pin
Dave Kreskowiak22-May-23 18:54
mveDave Kreskowiak22-May-23 18:54 
QuestionConcurrentList<T> Pin
Richard Andrew x6421-May-23 8:40
professionalRichard Andrew x6421-May-23 8:40 
AnswerRe: ConcurrentList<T> Pin
Gerry Schmitz21-May-23 8:50
mveGerry Schmitz21-May-23 8:50 
GeneralRe: ConcurrentList<T> Pin
Richard Andrew x6421-May-23 10:32
professionalRichard Andrew x6421-May-23 10:32 
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 

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.