public void acquire() { while (true) { var topics = payload.topics; topics.Clear(); foreach (KeyValuePair <string, IHandler> entry in handlers) { var topic = new TopicRequestDto() { topicName = entry.Key, lockDuration = 20_000 }; topics.Add(topic); } var tasks = restService.FetchAndLock(payload); foreach (var task in tasks.Result) { IHandler handler; if (handlers.TryGetValue(task.TopicName, out handler)) { handler.execute(task, externalTaskService); } } } }