不在异步方法中等待任务的注意事项

2024-03-03

我正在开发一个 Web API 项目,该项目使用 Azure 的托管缓存服务将数据库结果缓存在内存中,以缩短响应时间并减少数据库的重复流量。当尝试将新项目放入缓存时,有时会抛出特定于缓存的异常,代码为DataCacheErrorCode.RetryLater。当然,为了稍后重试而不需要阻止这个方法,我做了它async and await Task.Delay稍后再试。以前,开发人员硬编码了Thread.Sleep这确实损害了应用程序的性能。

方法签名现在看起来与此类似:

public static async Task Put(string cacheKey, object obj)

进行此更改后,我从应用程序中调用以前的同步版本的所有其他位置收到了大约 75 个编译器警告Put表明:

由于不等待此调用,因此在调用完成之前将继续执行当前方法。考虑将“await”运算符应用于调用结果。

在这种情况下,由于Put不返回任何内容,对我来说让这个操作有意义一劳永逸因为我没有看到任何理由阻止调用它的方法的执行。我只是想知道允许大量此类“即发即忘”是否存在任何危险或陷阱Tasks 在后台运行Put可以经常调用。或者我应该等待,因为 99% 的时间我不会收到重试错误和Task几乎会立即完成。我只是想确保我不会因为线程过多(或类似的情况)而受到任何处罚。


如果有机会的话Put会因任何原因抛出任何其他异常,并且您不使用await Put每次将对象插入到缓存时,异常都会被返回到返回的对象中Task这还没有被等待。如果您使用的是 .NET 4.0,此异常将在该版本的 Finalizer 中重新引发Task.。如果您使用 .NET 4.5,它将被忽略(这可能是不可取的)。

想要确保我不会因为拥有太多而受到任何处罚 许多线程或类似的东西。

我这么说只是为了把事情说清楚。当你使用Task.Delay,您没有旋转任何新线程。 ATask并不总是等于正在旋转的新线程。具体在这里,Task.Delay内部使用一个Timer,所以没有任何线程开销(除了当前正在延迟的线程,如果您确实使用await).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不在异步方法中等待任务的注意事项 的相关文章

  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • .NET 中是否有内置函数可以对密码进行哈希处理?

    我看到这个问题加密 散列数据库中的纯文本密码 https stackoverflow com questions 287517 encrypting hashing plain text passwords in database 我知道我
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • IEnumerable 与 IReadOnlyList

    选择有什么区别IEnumerable
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 第一个 Android 密钥库证书过期后会发生什么?

    就目前我所记得的 10 years是在 Eclipse 中创建密钥库时的默认设置 我认为 大约 5 年前 Android 开发已经成为主流 所以我预计很多应用程序在 5 年内将无法在 Play 商店中更新 到目前为止 我还没有找到如何 延长
  • 如何在微调器的底部添加一行,就像android中的edittext一样

    你好 我正在制作我正在使用的演示应用程序EditText其中底部出现一条线是可以的 但在旋转器的情况下则不然 这怎么可能做到 布局 xml
  • 如何添加表格作为标题?

    我正在与iTextSharp尝试向生成的 PDF 添加页眉和页脚 但是 如果我尝试添加宽度为页面 100 的页眉 则会遇到一些问题 所以我做了以下事情 1 我创建了一个名为PDF页眉页脚扩展了 iTextSharpPdfPageEventH
  • 带有 javascript_include_tag 的 Ruby On Rails 错误

    所以 据我所知 我的问题似乎是 ruby 没有加载所有的 javascript 文件 因为我没有收到确认消息 并且 link to with method delete 对我没有任何作用 使用提供给我的默认设置rails new views
  • 如何使用 xlrd 版本 1.1.0 读取 Excel 中的字体和背景颜色

    实际上我使用的是xlrd模块1 1 0版本 但我不知道如何读取单元格属性 如背景颜色 字体以及单元格是否被锁定 我尝试使用 import xlrd book xlrd open workbook sample xls formatting
  • 如何为我的 C# XNA 游戏制作 GUI? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的游戏有基本功能 可以通过命令行玩 但我想在它上面放一个 GUI 它是一款使用 C 和 XNA 框架编写的平台游戏 我用谷歌搜索并找
  • Tridion DTAP 澄清 - 我需要多少个内容交付设置?

    我询问了 Tridion DTAP 的开发人员设置 开发 测试 验收和生产 在另一个问题中 https stackoverflow com questions 11166754 proper dtap setup for content d
  • 使用 Python + Pylons 进行错误处理

    使用 Python Pylons 处理错误的正确方法是什么 假设用户通过表单设置密码 当通过控制器传递给模型类时 会抛出错误 因为密码太短 应如何处理该错误 以便在网页上显示错误消息 而不是整个脚本终止于错误页面 控制器本身是否应该有任何错
  • endl 和 cout 后的行距?

    我注意到在下面的代码中 cout lt lt Please enter your number cin gt gt Number cout lt lt Is this spaced C 命令窗口中的输出自动将 Is this spaced
  • 如何通过 Javascript 访问元素的 focus/hover/visited CSS 属性?

    我现在可能很累并且想法很奇怪 但我根本找不到如何检索元素的聚焦 悬停或访问状态中定义的 CSS 属性的值 目标是使用 Javascript 中的值 重要的 I 不需要获取聚焦 悬停 访问的元素 我想访问某些任意元素的值在 DOM 中为以下状
  • 如果省略 input_shape,Keras 模型的结构是什么?为什么它的性能更好?

    我省略了input shape错误地出现在我的 Keras 模型的第一层中 最终我注意到了这一点并修复了它 我的模型的性能急剧下降 查看有和没有的模型结构input shape 我发现性能更好的模型的输出形状为multiple 此外 将其绘
  • 子功能在 HTA 中不起作用

    我不知道为什么 但我的子功能不起作用 我以为我已经遵循了它应该如何工作 但它只会导致一个错误 声称我的函数未定义
  • 如何反转字符串中两个单词的顺序?

    我有一个像这样的字符串 a Mike Tree 我想将其反转为 Tree Mike 有什么功能可以做到这一点吗 将绳子分成两根绳子 翻转它们 然后重新连接它们 或者 使用正则表达式 a s 2 1 g
  • r 中的动态变量命名

    structure list Metrics structure c 1L 2L 3L 4L 5L 6L 1L 2L 3L 4L 5L 6L 1L 2L 3L 4L 5L 6L 1L 2L 3L 4L 5L 6L Label c LINES
  • 在未越狱的 iOS 设备上启用/禁用 Wifi

    我的内部应用程序需要这个 我想在 ios 设备上切换 wifi 任何框架都可用 我尝试了以下代码 但它没有为我提供任何帮助 这不会改变我的 wifi 设置 Class BluetoothManager objc getClass Bluet
  • 更改index.html nginx kubernetes部署

    我有这样的部署 我能够在我的一个 Pod 上编辑索引页面 但如何将其提交到部署映像 因此 当我扩展应用程序时 所有新的 Pod 都将具有相同的图像并编辑了索引 这对我有用 apiVersion v1 kind Pod metadata na
  • 使用 Id 以外的属性查询 DocumentDB

    我想查询 DocumentDB 数据库中的文档 我想使用 LINQ 处理 DocumentDB 查询并想要查询 facebookUsername 字段 如果我使用下面的代码来查询标准 Id 字段 它工作正常 但是当我尝试使用 faceboo
  • PHP 中是否可以声明静态方法和非静态方法?

    我可以将对象中的方法声明为静态方法和非静态方法 并且与调用静态方法的名称相同吗 我想创建一个具有静态方法 send 和调用静态函数的非静态方法的类 例如 class test private text public static funct
  • 如何使用callkit获取来电号码

    如何使用 Call Kit 框架以编程方式获取来电电话号码 我尝试使用 cxcallobserver 类 但没有用 任何建议最有帮助 使用 CallKit 的呼叫阻止和识别功能 iOS 10 中的新增功能 时 要阻止或识别的电话号码会在来电
  • 不在异步方法中等待任务的注意事项

    我正在开发一个 Web API 项目 该项目使用 Azure 的托管缓存服务将数据库结果缓存在内存中 以缩短响应时间并减少数据库的重复流量 当尝试将新项目放入缓存时 有时会抛出特定于缓存的异常 代码为DataCacheErrorCode R