c# - Azure 存储表 : Is it okay to fire-and-forget async methods?

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

我的 MVC Web 应用程序中有一个方法可以清理 Azure 表存储中的旧数据,例如废弃的用户 session 。我正在将工作批处理到使用 CloudTable.ExecuteBatchAsync 执行的 TableBatchOperation 对象中。我不需要等待结果,如果操作因网络问题等原因失败,也没关系,因为我可以稍后再试。是否可以只调用该方法而不使用 await 或任何其他内容然后走开?

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

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

// Method ends here

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

最佳答案

您可以这样做,因为它有效并且可以满足您的要求。您不关心失去工作的可能性。

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

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

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

关于c# - Azure 存储表 : Is it okay to fire-and-forget async methods?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224332/

相关文章:

c# - 为什么 AcquireRequestState 隐藏 Inherited HttpApplication.AcquireRequestState 而 Application_Start 则不隐藏?

c# - 使用 OnClick 事件与 asp :Button 的 PostBackUrl 属性

c# - 将 C/C++ 结构转换为 C#.Net CF WinCE

azure - 避免从函数应用程序中记录应用程序见解中的严重性级别 0

azure - 通过自定义策略将多个社交帐户链接到 Azure B2C 本地帐户

azure - 我们可以通过 Azure AD B2C 的身份验证获取电子邮件和密码吗

c# - '&'在xml中怎么写?

c# - 允许用户编辑/添加/移动图像中的项目

c# - 为什么不从 List<T> 继承?

c# - 添加迁移时出现错误 'OracleInternal.Common.ODTSettings.m_bUseLongIdentifiers'