private void ThreadPoolRunner(object state) { lock (_lock) { WorkItemInfo info = (WorkItemInfo)state; using (SqliteTransaction transaction = info.database.BeginTransaction()) using (SqliteCommand command = info.database.CreateCommand()) { command.Transaction = transaction; if (info.queriesCount == 1) { ExecuteOnce(command, info.query); } else { ExecuteMany(command, info.queries, info.queriesCount); } transaction.Commit(); } _workItemPool.Pay(info); } ThreadSafety.RunOnMainThread(_completedAction); }