Используя Simple.Odata.Client, я пакетирую запросы GET и добавляю результаты этих запросов в список. Как ниже:
var results = new List<Thing>();
var ids = new List<long>() { 1, 2, 3, 4, 5, 6 };
var batch = new ODataBatch(_client);
foreach (var id in ids)
{
batch += async c =>
{
results.Add(await c.For<Thing>().Key(id).FindEntryAsync());
};
}
await batch.ExecuteAsync();
Проблема в том, что (как описано здесь - https://github.com/simple-odata-client/Simple.OData.Client/issues/181) обработчик пакета вызывается дважды, что означает, что для каждого успешного результата, добавляемого в список результатов, также добавляется нулевое значение.
Говорят, что решением было «убрать все операторы, не связанные с пакетными операциями (например, results.Add (...)) из пакетной лямбды». Однако я не понимаю, как это можно сделать, потому что у меня нет доступа к результату пакетного запроса за пределами лямбды. Я понимаю, что решение было бы проверить нулевое значение перед добавлением результата в список результатов, но я хотел бы посмотреть, если кто-нибудь знает лучший способ, или может объяснить, как добавить результаты за пределами пакетного лямбда. Спасибо:)