-
Notifications
You must be signed in to change notification settings - Fork 72
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Concurrency Issue #29
Comments
I'm getting the same issue, somewhat random. Aside from restarting the process, how can I avoid getting this error? Once its in a corrupt state, it seems only a restart can solve it. |
Same thing, this bug suddenly appeared today. |
In the meantime I've just implemented a cache check with concurrent dictionary before making a call to DeviceDetectorNET |
@cpkuo care to share the code? :) |
Sure, there is still the possibility that DeviceDetector will write to it's internal cache collection on concurrent requests but this seems to have helped me in a high load environment. I wonder if setting a new instance of DictonaryCache on each request in combination with the custom ConcurrentDictionary cache will completely eliminate the error. I will need to review the source code at some point, in the meantime here is some code. `private static ConcurrentDictionary<string, DeviceInfo> cache = new ConcurrentDictionary<string, DeviceInfo>();
|
So I went into the source code to match up with the stack trace for this exception and realized I was using a dotnet core version package of DeviceDetector.NET that I don't believe exists anymore. Nuget package manager was not notifying me of updating. So I removed it and started using the latest package of DeviceDetector.NET which now supports the latest .net standard. So far, I have not run into this issue. |
This can still happen:
I'm now following the advice to cache userAgents and I set |
I did my final fix has having a custom ICache with ConcurrentDictionary instead of just Dictionary |
Code USed: Startup.cs
Issue encounter:
System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
at System.Collections.Generic.Dictionary`2.ContainsKey(TKey key)
at DeviceDetectorNET.Cache.DictionaryCache.Contains(String id)
at DeviceDetectorNET.Cache.DictionaryCache.Fetch(String id)
at DeviceDetectorNET.Parser.ParserAbstract`2.GetRegexes()
at DeviceDetectorNET.Parser.Client.LibraryParser..ctor()
at DeviceDetectorNET.Parser.Client.ClientType.get_Library()
at DeviceDetectorNET.DeviceDetector.AddClientsParser()
at DeviceDetectorNET.DeviceDetector..ctor(String userAgent)
The text was updated successfully, but these errors were encountered: