private static void UploadTrackingDataAndFlushBuffer() { if (bufferedTrackedPositions == null) return; if (bufferedTrackedPositions.Count == 0) return; //copy tracking data and clear buffer TrackedPosition[] tmp; lock (bufferedTrackedPositionsLock) { int numPositions = bufferedTrackedPositions.Count; tmp = new TrackedPosition[numPositions]; bufferedTrackedPositions.CopyTo(tmp); bufferedTrackedPositions.Clear(); } radiomapEntities context = new radiomapEntities(radiomapUri); foreach (TrackedPosition pos in tmp) { context.AddToTrackedPositions(pos); } context.BeginSaveChanges(SaveChangesOptions.Batch, OnPositionEstimatesSaved, context); }