Return partial result (list of data) while using yield return and exception throw

I have the following code which yields objects (exception is rethrown because I need to handle it also in the caller method).

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code> public IEnumerable<YourObjectType> GetAllObjects(PageInfo pageInfo)
{
int errorPage = 0;
try
{
while (true)
{
List<YourObjectType> objectsOnPage = CallApi(pageInfo); // Call your API with current PageInfo
if (objectsOnPage.Count == 0)
{
// No more objects, break out of the loop
yield break;
}
foreach (YourObjectType obj in objectsOnPage)
{
yield return obj;
}
// Increment the page number for the next request
pageInfo.Page++;
}
}
catch (Exception ex)
{
// Exception occurred, save the error page
errorPage = pageInfo.Page;
throw; // Re-throw the exception
}
}
</code>
<code> public IEnumerable<YourObjectType> GetAllObjects(PageInfo pageInfo) { int errorPage = 0; try { while (true) { List<YourObjectType> objectsOnPage = CallApi(pageInfo); // Call your API with current PageInfo if (objectsOnPage.Count == 0) { // No more objects, break out of the loop yield break; } foreach (YourObjectType obj in objectsOnPage) { yield return obj; } // Increment the page number for the next request pageInfo.Page++; } } catch (Exception ex) { // Exception occurred, save the error page errorPage = pageInfo.Page; throw; // Re-throw the exception } } </code>
    public IEnumerable<YourObjectType> GetAllObjects(PageInfo pageInfo)
{
    int errorPage = 0;

    try
    {
        while (true)
        {
            List<YourObjectType> objectsOnPage = CallApi(pageInfo); // Call your API with current PageInfo

            if (objectsOnPage.Count == 0)
            {
                // No more objects, break out of the loop
                yield break;
            }

            foreach (YourObjectType obj in objectsOnPage)
            {
                yield return obj;
            }

            // Increment the page number for the next request
            pageInfo.Page++;
        }
    }
    catch (Exception ex)
    {
        // Exception occurred, save the error page
        errorPage = pageInfo.Page;
        throw; // Re-throw the exception
    }
}

Although I do have try-catch, my outer method (which calls GetAllObjects) does not receive list of already received objects (basically, that is partial result, because there might be more pages pending).

So I can change code like this:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code>public List<YourObjectType> GetAllObjects(PageInfo pageInfo)
{
List<YourObjectType> allObjects = new List<YourObjectType>();
int errorPage = 0;
try
{
while (true)
{
List<YourObjectType> objectsOnPage = CallApi(pageInfo); // Call your API with current PageInfo
if (objectsOnPage.Count == 0)
{
// No more objects, break out of the loop
break;
}
allObjects.AddRange(objectsOnPage);
// Increment the page number for the next request
pageInfo.Page++;
}
}
catch (Exception ex)
{
// Exception occurred, save the error page
errorPage = pageInfo.Page;
throw; // Re-throw the exception
}
return allObjects;
}
</code>
<code>public List<YourObjectType> GetAllObjects(PageInfo pageInfo) { List<YourObjectType> allObjects = new List<YourObjectType>(); int errorPage = 0; try { while (true) { List<YourObjectType> objectsOnPage = CallApi(pageInfo); // Call your API with current PageInfo if (objectsOnPage.Count == 0) { // No more objects, break out of the loop break; } allObjects.AddRange(objectsOnPage); // Increment the page number for the next request pageInfo.Page++; } } catch (Exception ex) { // Exception occurred, save the error page errorPage = pageInfo.Page; throw; // Re-throw the exception } return allObjects; } </code>
public List<YourObjectType> GetAllObjects(PageInfo pageInfo)
{
    List<YourObjectType> allObjects = new List<YourObjectType>();
    int errorPage = 0;

    try
    {
        while (true)
        {
            List<YourObjectType> objectsOnPage = CallApi(pageInfo); // Call your API with current PageInfo

            if (objectsOnPage.Count == 0)
            {
                // No more objects, break out of the loop
                break;
            }

            allObjects.AddRange(objectsOnPage);

            // Increment the page number for the next request
            pageInfo.Page++;
        }
    }
    catch (Exception ex)
    {
        // Exception occurred, save the error page
        errorPage = pageInfo.Page;
        throw; // Re-throw the exception
    }

    return allObjects;
}

I will receive result even in case of the error, but it might bring performance issues. I could have thousands of objects, so it seems like not a good idea to put them into the list directly.

What will be the best approach for such case? Are there some alternatives of how I could still use yield, but also be able to return partial result in case of exception?

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật