【发布时间】:2014-11-17 17:28:34
【问题描述】:
我正在开发一个 Web API 项目,该项目使用 Azure 的托管缓存服务将数据库结果缓存到内存中,以缩短响应时间并减少数据库的重复流量。尝试将新项目放入缓存时,有时会抛出特定于缓存的异常,代码为DataCacheErrorCode.RetryLater。自然,为了稍后重试而无需阻止此方法,我将其设置为 async 和 await Task.Delay 稍后再试一次。以前,开发人员在其中硬编码了 Thread.Sleep,这确实会损害应用程序的性能。
方法签名现在看起来与此类似:
public static async Task Put(string cacheKey, object obj)
在此更改之后,我从应用程序中调用以前同步版本的 Put 的所有其他位置收到约 75 条编译器警告,指示:
由于不等待此调用,因此在调用完成之前继续执行当前方法。考虑将 'await' 运算符应用于调用结果。
在这种情况下,由于 Put 没有返回任何内容,因此让此操作 即发即弃 对我来说是有意义的,因为我看不出有任何理由阻止执行调用它的方法。我只是想知道是否有任何危险或陷阱允许大量这些即发即弃的Tasks 在后台运行,因为Put 可以经常被调用。或者我应该等待,因为 99% 的时间我不会收到重试错误,Task 几乎会立即完成。我只是想确保我不会因为线程过多(或类似的东西)而受到任何惩罚。
【问题讨论】:
标签: c# .net async-await task-parallel-library fire-and-forget