Azure 存储表:即发即弃异步方法是否可以?

Azure Storage Tables: Is it okay to fire-and-forget async methods?

我的 MVC Web 应用程序中有一个方法可以从 Azure Table 存储中清除旧数据,例如废弃的用户会话。我正在将我的工作分批处理成 TableBatchOperation 个对象,我正在使用 CloudTable.ExecuteBatchAsync 执行这些对象。我不需要等待结果,如果由于网络问题等原因操作失败,也没有关系,因为我可以稍后再试。可以只调用没有 await 或其他任何东西的方法然后走开吗?

也就是说,这段代码会不会出问题?

List<TableBatchOperation> batches = { ... }
foreach (TableBatchOperation batch in batches) {
    table.ExecuteBatchAsync(batch);
}

// Method ends here

或者我是否需要捕获所有 return 对象并对其调用 Wait()

你可以这样做,因为它可以工作并且可以做你想做的事。您不关心丢失工作的可能性。

您可能仍然需要错误处理和日志记录。假设您错误地设置了存储配置,所有 工作项都失败了。你可能想知道。

table.ExecuteBatchAsync(batch) 包装在一个异步函数中,您可以在其中捕获并记录异常。丢弃该函数返回的任务。 (或者,附加一个延续,但我发现那是更糟糕的代码。)

另请注意,该资源不受限制地使用它。如果此循环迭代多次,则许多操作排队或并发 运行。这可能是个问题。如果您期望低负载,那么冒这个风险是有效的。