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