Is there a data structure similar to ConcurrentDictionary<TKey,TValue> and Interlocked.Exchange<T>(...) that would allow you atomically to set a new value and retrieve the old value assigned to an arbitrary key? Doesn't seem possible with any of the AddOrUpdate(...) overloads.
.NET Concurrent Dictionary Exchange Value
106 views Asked by Kyle McClellan At
2
There are 2 answers
2
Charlieface
On
You could use the following extension functon
public static TValue Exchange<TKey, TValue>(this ConcurrentDictionary<TKey, TValue> source, TKey key, TValue value)
where TKey : notnull
{
TValue oldValue = default;
_ = dict.AddOrUpdate(key,
key => { oldValue = default; return newValue; },
(key, old) => { oldValue = old; return newValue; });
return oldValue;
}
Related Questions in C#
- How to call a C language function from x86 assembly code?
- What does: "char *argv[]" mean?
- User input sanitization program, which takes a specific amount of arguments and passes the execution to a bash script
- How to crop a BMP image in half using C
- How can I get the difference in minutes between two dates and hours?
- Why will this code compile although it defines two variables with the same name?
- Compiling eBPF program in Docker fails due to missing '__u64' type
- Why can't I use the file pointer after the first read attempt fails?
- #include Header files in C with definition too
- OpenCV2 on CLion
- What is causing the store latency in this program?
- How to refer to the filepath of test data in test sourcecode?
- 9 Digit Addresses in Hexadecimal System in MacOS
- My server TCP doesn't receive messages from the client in C
- Printing the characters obtained from the array s using printf?
Related Questions in .NET
- file download method in visual studio 2017
- Repository manager receives the wrong connection string in .net core
- MongoDb not connecting C#
- The current .NET SDK does not support targeting .NET Core 6.0. Brand new WPF Project VS Community 2022 17.9.5
- Why Scanning GSI on DynamoDb doesnt work as fast as expected when using CONTAINS?
- Are "blittable types" really unmanaged types for StructLayout Sequential
- Failed to fetch dynamically imported module on Blazor JS Interop
- Problem to upload several images per one request
- Implementing Azure AD B2C Authentication in .NET 8 Blazor Project (RenderMode: InteractiveAuto)
- Stripe connect payout - throws exceptions
- 'IOException: The cloud file provider is not running', when trying to delete 'cloud' folder
- Azure Application Insights Not Displaying Custom Logs for Azure Functions with .NET 8
- Convert C# DateTime.Ticks to Bigquery DateTime Format
- Socket.io nodejs server .NET connection
- Producer Batching Service Bus Vs Kafka
Related Questions in COLLECTIONS
- Collections.max with custom Comparator on list
- ImportError: cannot import name 'Mapping' from 'collections' (E:\Anaconda\envs\nlp\Lib\collections\__init__.py)
- How to solve sonarqube issue based on bug to return a copy
- Pluck from a Java Collection using stream
- Havin a error with working a collection after deserialize json
- Are there any drawbacks in merging collections with Stream.concat()?
- Iterate with List(mylist.size){ index -> TODO()} or Map in kotlin Kotlin
- How to Pass-in a Collection name and Document Key to an AQL query to update the document
- Unexpect Behavior with Multiple Java Threads and TreeMap.put()
- Kotlin - Lists operations between lists with different T's
- C# Dictionary.Add(KeyValue, Structure) updates all existing records with last added structure but with the new KeyValue
- Mongodb find operation in embedded document
- what's the purpose of a local variable copy of internal array in dotnet collections source code
- How to implement read and write locking for a MongoDB collection?
- Custom equality comparator for set operation in Kotlin
Related Questions in CONCURRENCY
- Unexpected inter-thread happens-before relationships from relaxed memory ordering
- Multiple Processes, Multiple Processors, Single Priority Queue - Java Thread-Safe and Concurrency -
- Efficiently processing many small elements of a collection concurrently in Java
- Zig Concurrency Vs Erlang Concurrency, is Zig less efficient than Erlang?
- Two Update statements on a row are running simultaneously with no locking in MYSQL
- How to Identify Specific Transaction Anomalies in a Given Schedule?
- How can I improve concurrent message processing with Google Task Queue?
- Why does the following program printf "thread 1 exists" twice in WSL2?
- ModelState.IsValid is false when its Data Model Concurrency Token is non nullable
- .NET A second operation was started on this context instance before a previous operation completed
- Can someone tell me what's wrong with mi Task.await?
- I am a beginner. More than problems, I have ideas I share my code ;D. NO RULES
- Understanding Potential Deadlock in Resource Pool Implementation Described in "Go in Action"
- Why are pre-allocated stacks expensive, given 64-bit virtual memory?
- Concurrency issues with server-sent events in Python
Related Questions in CONCURRENTDICTIONARY
- Serializing custom types in a C# ConcurrentDictionary
- .NET Concurrent Dictionary Exchange Value
- ConcurrentDictionary.GetOrAdd nested collections
- Bizarre concurrent behavior when I cast `ConcurrentDictionary` to an `IDictionary`
- Why is ConcurrentDictionary always faster than normal Dictionary?
- Is it allowed to remove items from a ConcurrentDictionary while iterating it in a Foreach loop?
- Comparing characteristics of accessing class properties in C# via a static generic class and static class with ConcurrentDictionary
- Update value in ConcurrentDictionary by condition
- Could there be concurrency issues if I update other keys during a key update inside C# ConcurrentDictionary?
- Incrementing a integer value in a concurrent dictionary
- ConcurrentDictionary missing values?
- Uniqueness of an Action in C#
- Is there a way to identify whether a value was successfully found or if it was added when using ConcurrentDictionary.GetOrAdd?
- Memory not being collected in a timely fashion when using a ConcurrentDictionary
- Concurrent Dictionary is always empty
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
This functionality is not included out of the box. An API proposal for a
Transactmethod exists in the GitHub dotnet/runtime repository, that would offer this functionality, but currently hasn't created much traction. You could implement it manually though, using the rudimentaryTryGetValue,TryAddandTryUpdatemethods:The above implementation is a modified version of the existing
AddOrUpdateimplementation.