如何处理filePaths为空场景:避免函数崩溃并直接返回空任务
处理filePaths为空时的GetData()逻辑
这是个很常见的异步任务处理场景,咱们直接调整你的GetData()函数逻辑就能解决问题——核心思路是在路径为空时直接返回无结果的已完成任务,既避免崩溃,又不影响后续的自动重试。
修改后的代码如下:
public async Task<Data[]> GetData() { var filePaths = GetPathsContainingData(); // 先判断路径集合是否为空,为空直接返回空数组的已完成任务 if (filePaths == null || !filePaths.Any()) { // 可选:这里可以加日志记录,方便排查无路径的情况 // _logger.LogWarning("No data file paths found, returning empty result for this cycle."); return await Task.FromResult(Array.Empty<Data>()).ConfigureAwait(false); } var tasks = filePaths .Select(f => _ReadAndParseFromPaths(f)) .ToArray(); return await Task.WhenAll(tasks).ConfigureAwait(false); }
为什么这么改?
- 当
filePaths为空(甚至为null)时,我们直接用Task.FromResult(Array.Empty<Data>())返回一个已完成的、符合返回类型的任务,跳过后续的文件读取解析操作,从根源上避免空集合可能引发的崩溃。 - 因为你的
Main()方法每分钟都会调用一次GetData(),本次返回空结果后,下一分钟会自动触发重试,完全符合你“之后再进行重试”的需求。
额外优化小建议
- 日志辅助排查:在空路径分支里添加日志记录,能帮你快速定位无路径的发生时机,判断是文件未创建、发布延迟还是其他问题导致的。
- 空值防护:增加
filePaths == null的判断,避免GetPathsContainingData()返回null时触发NullReferenceException。
内容的提问来源于stack exchange,提问作者ghost media
相关产品推荐
相关产品推荐

