using System;
using System.Collections.Generic;
+using System.Collections.Concurrent;
using System.Net;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
private bool _cacheEnabled = false;
private ResourceOptions _options;
- private int _responseCallbackId = 1;
- private static Dictionary<IntPtr, Interop.IoTConnectivity.Client.RemoteResource.ResponseCallback> _responseCallbacksMap = new Dictionary<IntPtr, Interop.IoTConnectivity.Client.RemoteResource.ResponseCallback>();
+ private static int _responseCallbackId = 1;
+ private static IDictionary<IntPtr, Interop.IoTConnectivity.Client.RemoteResource.ResponseCallback> _responseCallbacksMap = new ConcurrentDictionary<IntPtr, Interop.IoTConnectivity.Client.RemoteResource.ResponseCallback>();
private Interop.IoTConnectivity.Client.RemoteResource.CachedRepresentationChangedCallback _cacheUpdatedCallback;
private Interop.IoTConnectivity.Client.RemoteResource.StateChangedCallback _stateChangedCallback;
_responseCallbacksMap[id] = (IntPtr resource, int err, int requestType, IntPtr responseHandle, IntPtr userData) =>
{
IntPtr responseCallbackId = userData;
- lock(_responseCallbacksMap)
- {
- _responseCallbacksMap.Remove(responseCallbackId);
- }
+
+ _responseCallbacksMap.Remove(responseCallbackId);
if (responseHandle != IntPtr.Zero)
{
_responseCallbacksMap[id] = (IntPtr resource, int err, int requestType, IntPtr responseHandle, IntPtr userData) =>
{
IntPtr responseCallbackId = userData;
- lock (_responseCallbacksMap)
- {
- _responseCallbacksMap.Remove(responseCallbackId);
- }
+
+ _responseCallbacksMap.Remove(responseCallbackId);
+
if (err == (int)(IoTConnectivityError.Iotivity))
{
RemoteResponse response = new RemoteResponse();
_responseCallbacksMap[id] = (IntPtr resource, int err, int requestType, IntPtr responseHandle, IntPtr userData) =>
{
IntPtr responseCallbackId = userData;
- lock (_responseCallbacksMap)
- {
- _responseCallbacksMap.Remove(responseCallbackId);
- }
+
+ _responseCallbacksMap.Remove(responseCallbackId);
+
if (responseHandle != IntPtr.Zero)
{
try
_responseCallbacksMap[id] = (IntPtr resource, int err, int requestType, IntPtr responseHandle, IntPtr userData) =>
{
IntPtr responseCallbackId = userData;
- lock (_responseCallbacksMap)
- {
- _responseCallbacksMap.Remove(responseCallbackId);
- }
+
+ _responseCallbacksMap.Remove(responseCallbackId);
+
if (err == (int)(IoTConnectivityError.Iotivity))
{
RemoteResponse response = new RemoteResponse();