是否可以同步调用异步调用?

2024-04-28

我在下面放置了一些非常基本的代码来说明我正在尝试做的事情。我有执行异步操作的“DoSomethingAshnc”方法。我希望“DoSomething”方法成为同步方法,不接受操作参数并返回 int。

public void DoSomething(Action<int> actionToPerformOnComplete)
    {
        DoSomethingAsync(delegate(int val)
            {
                actionToPerformOnComplete(val);
            });
    }

是否有可能让“DoSomething”返回一个整数,就好像该方法同步发生一样?


您需要在同步方法的末尾添加一些内容,以告诉它等待其他调用完成。我假设您的异步方法将有一个事件来告诉调用者它何时完成。

如果是这样,那么我建议使用类似 ManualResetEvent 的东西,在同步线程中等待它,并将其设置在异步线程的 Finish 事件接收器中。

Example:

public void DoSomething(Action<int> actionToPerformOnComplete)
{
   ManualResetEvent mre = new ManualResetEvent(false);
   DoSomethingAsync(delegate(int val)
   {
      try
      {
         actionToPerformOnComplete(val);
      }
      finally
      {
         mre.Set();
      }
   });
   mre.WaitOne();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以同步调用异步调用? 的相关文章

随机推荐

  • 通过国家代码检查手机号码是否有效

    我有像 919672525253 这样的联系人 现在我从该号码中提取国家 地区代码 例如 91 现在 如果号码类似于 9672525253 并且如果我提取国家 地区代码 那么它将给我 967 所以提取后国家 地区代码 我如何检查剩余号码是否
  • 使用并行的 parLapply:无法访问并行代码中的变量

    我最近得到了一台具有多个核心的计算机 并且正在学习使用并行计算 我相当熟练lapply并被告知parLapply工作原理非常相似 但我没有正确操作它 看来我必须明确地将所有内容放入parLapply使其工作 即要使用的函数 变量等 和lap
  • YouTube 视频 ID 的正则表达式

    我有以下代码可以从字符串中检测视频 ID 它实际上捕获了我需要的更多情况 我想让它更简单并仅返回以下格式的字符串的 id https www youtube com watch v 85PMSYAguZ8 https youtu be 85
  • 在 Jetty 运行时设置 ssl 密钥库

    是否可以在运行时更改密钥库 目前我正在设置 SSL 然后再执行 server start sslContextFactory setTrustStore ks sslContextFactory setTrustStorePassword
  • 无法获取 GED 日志缓冲区,错误(0)

    我的 Android 项目有一个大问题 那就是error Failed to get GED Log Buf err 0 我真的不知道该怎么办以及如何解决它 有人可以帮我吗 非常感谢 Find Advanced logging在你手机的De
  • TSQL 检索当月/当年的所有记录

    我有一个名为 DateFinished 的日期时间字段 我需要能够检索 DateFinished 在当前月份 年份内的所有记录 如果您只有少量行 这将可以获取所有行DateFinished就在今年这个月 SELECT FROM MyTabl
  • 内部应用程序 - 为什么不公开所有内容?

    我是否有理由不应该在我们的 Intranet 报告应用程序中将所有内容标记为公开 公司之外的任何人都无法访问此代码 我们有大约 20 个项目 大多数都是小型且具体的 我们真的应该将事物标记为公开以外的任何东西吗 我对此有自己的想法 但我试图
  • pgadmin4 : 无法联系 postgresql 应用程序服务器。

    我在 Windows 8 1 上安装了 PostgreSQL 9 6 2 但 pgadmin4 无法联系本地服务器 我尝试了 stackoverflow 中建议的几种解决方案 尝试卸载并重新安装 PostgreSQL 9 6 2 尝试修改
  • 当我管理推送通知时如何知道我的应用程序是否打开

    使用Android 当我收到通知推送抛出我的GCMIntentService时 我想知道我的应用程序是否打开 因为如果我的应用程序在用户单击通知时打开 我不想执行任何操作 但如果应用程序关闭我想打开应用程序 启动根活动 清单中具有 ACTI
  • 为什么他们会对某些初始值设定项列表进行特殊处理,而不是将它们全部视为相同?

    假设我有一个变量auto x我想初始化为7使用大括号初始化 简单 auto x 7 除了我了解到 x 是NOT一个整数 但它本身是一个初始化列表 为什么 委员会决定是否有具体原因auto应该在单个自动值的情况下获取初始化列表 或者他们是否希
  • Laravel 输入:get() 不起作用

    我正在尝试在 Laravel 4 中使用 post 函数 我的表单有许多字段 在提交时 会转到控制器中的 post 函数 问题是 表单中的字段名称之间有空格 例如 Type 1 是输入的名称 中间有一个空格 现在 当我尝试通过执行以下操作来
  • Django JavaScript 翻译 gettext 未定义

    我的 JavaScript 函数包含以下内容 document getElementById example innerHTML gettext This is an example 我的 urls py 看起来像 urlpatterns
  • 类似代码之间 numpy 的巨大速度差异

    为什么以下L2范数计算之间的速度差异如此之大 a np arange 1200 0 reshape 1 3 timeit np sqrt a a sum axis 1 100000 loops best of 3 12 s per loop
  • CSS 术语:这些叫什么?

    考虑 p foo bar CSS 中这些语句的正确名称是什么 我见过它们被称为选择器 规则或规则集 但哪个是正确的 将考虑一条规则 p 本例中的选择器是 p 规则由选择器和声明组成 声明是property value所以整个规则是 sele
  • 如何使用 Enumerable.Range 获取备用数字?

    If Start 0 and Count 10那么如何使用获取替代值Enumerable Range 输出应该是这样的 0 2 4 6 8 and if Start 1 and Count 10 then 1 3 5 7 9 连续值可以得到
  • 设置Webstorm/PHPStorm文件刷新时间

    这可能只是一些我似乎找不到的简单设置 事情是这样的 我有一个带有一些 Compass Sass CSS 的 Web 项目 当我修改 Sass 文件时 Compass 会自动为我创建相应的 CSS 文件 如果文件发生更改 Webstorm 会
  • 如何在 PHPUnit 中执行所有测试?

    我正在尝试从我的测试套件运行所有测试 但是当我运行命令时 PHPUnit 找不到测试phpunit 我在 phpunit xml 中配置测试套件 phpunit xml
  • 为什么 document.getElementById 在 IE8 中被视为对象

    我注意到document getElementById是 Firefox 和 Chrome 中的一个函数 而typeof 至少 将其视为 IE8 中的对象 有人知道为什么吗 IE8 尝试 实现 https en wikipedia org
  • 输出罐子是空的。您是否指定了正确的“-keep”选项?

    我正在尝试从 ant 构建一个发布 APK 文件 这就是我在控制台中得到的内容 D AndroidSDK android sdk r18 windows android sdk windows tools ant build xml 595
  • 是否可以同步调用异步调用?

    我在下面放置了一些非常基本的代码来说明我正在尝试做的事情 我有执行异步操作的 DoSomethingAshnc 方法 我希望 DoSomething 方法成为同步方法 不接受操作参数并返回 int public void DoSomethi