【问题标题】:Azure Storage Tables: Is it okay to fire-and-forget async methods?Azure 存储表:可以触发并忘记异步方法吗?
【发布时间】:2015-05-13 20:11:34
【问题描述】:

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

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

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

// Method ends here

或者我需要捕获所有返回对象并在它们上调用Wait()

【问题讨论】:

  • 取决于您希望从中获得什么。如果无法访问 API 或服务无法访问怎么办?
  • 感谢您的回复。我已经编辑了这个问题,以澄清我不需要知道结果。如果有暂时的问题,那没关系,因为我以后会再试一次。

标签: c# .net azure asynchronous azure-table-storage


【解决方案1】:

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

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

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

另请注意,该资源无限制地使用它。如果此循环多次迭代,则许多操作会排队或同时运行。这可能是个问题。如果您预计负载较低,则可以冒此风险。

【讨论】:

    猜你喜欢
    • 2013-09-01
    • 2014-12-06
    • 1970-01-01
    • 2020-04-25
    • 2016-06-21
    • 2018-07-27
    • 2014-05-05
    • 2010-09-14
    • 1970-01-01
    相关资源
    最近更新 更多