You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于异步返回的满量列表实现循环重执逻辑?

解决方案

直接调整代码逻辑,通过判断Execute()返回的消息列表长度来决定是否等待。同时注意在异步方法中用await Task.Delay()替代Thread.Sleep(),避免阻塞线程:

public async Task ProcessNewMessages()
{
    while (true)
    {
        List<Message> newMessages = null;
        await _exceptionHandler.WithExceptionHandling(async () =>
        {
            newMessages = await _newUncompletedMessagesJob.Execute();
            // Do stuff 处理消息的逻辑保持不变
        });

        // 根据返回的消息数量决定是否等待
        if (newMessages?.Count < 10)
        {
            await Task.Delay(30000); // 不满10条时等待30秒
        }
        // 满10条时直接进入下一次循环,立即重新执行
    }
}

关键说明:

  • 将消息列表变量移到异常处理外层,方便后续判断长度。
  • 替换Thread.Sleep为Task.Delay:在异步方法中,Thread.Sleep会阻塞当前线程,而Task.Delay是异步等待,不会占用线程资源,更符合异步编程的最佳实践。
  • 逻辑判断:如果返回的消息数小于10(包括空列表的情况),就等待30秒再继续检查;如果刚好是10条,直接进入下一次循环,立即执行Execute()拉取新消息。

内容的提问来源于stack exchange,提问作者Sebastiaan Haverkate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:39:51