Metro 应用程序中的异步调用链接

2024-03-06

我对 Metro 开发很陌生,我只希望能够以一种可以理解的方式表达我的问题......

实际上我正在将旧应用程序的一部分移植到 Metro。逻辑部分是一个单独的项目(便携式库),它应该服务于 1) 旧的 WPF 应用程序和 2) 新的 Metro 应用程序。基本逻辑是相同的,但某些子系统(例如文件操作管理器)必须以不同的方式编码 - 即 Metro 的异步方式。

我的问题是:我是否必须将调用者-被调用者的整个方法链重写为新的异步范例?假设我有 4 个方法链,从方法 A = Metro UI 事件异步处理程序开始(对我来说,将其编码为 async void 是有意义的,因为它是顶部的 fire&forget 事件),通过接下来的 2 个方法(B 和 C )放置在我的应用程序的不同层中,一直到包含“await CreateFileAsync”方法(由 Microsoft 设为异步)的方法 D。

现在:应使用await 调用异步CreateFileAsync 方法。这迫使我也将方法 D 设为异步。要从 C 调用方法 D,从 B 调用方法 D,从 A 调用方法 B - 我是否必须将所有 A、B 和 C 重写为异步等待样式?

我觉得我缺少更深入的知识,所以我正在努力自学,但同时我想在这里试试运气......

我是否必须重写大部分代码?我上面的说法有错误吗?

预先非常感谢,汉斯


我建议您将可移植库重写为异步的。情况不像以前那么糟糕了;微软非常努力async/await使同步代码转换为异步代码尽可能容易。我预计在不久的将来,很多其他人也会做同样的事情,并且 R# 可能会实现“make async”重写。

混合同步和异步代码时存在一些不明显的陷阱 - 请参阅 Stephen Toub 的上一篇博客文章我应该为异步方法公开同步包装器吗? http://blogs.msdn.com/b/pfxteam/archive/2012/04/13/10293638.aspx因此,我认为将异步操作公开为异步 API(将同步操作公开为同步 API)更加干净。

Update:如果您确实希望同步代码调用异步代码,那么您可以使用Task.WaitAndUnwrapException扩展方法在我的 AsyncEx 库 http://nitoasyncex.codeplex.com。但是,您仍然遇到 Stephen Toub 的帖子中提到的问题,即:

  1. 如果你的库不使用,你可能会陷入僵局ConfigureAwait(false)任何地方都可以。
  2. 如果遇到线程池中的最大线程数,也可能会发生死锁。

(2) 不再那么常见,但 (1) 确实有可能。是有规律的带大 http://social.msdn.microsoft.com/Forums/en-AU/async/thread/269172a3-adb9-4b5e-9ac1-8b67ff920177#48b596cc-5eca-4d0e-8743-10d59b64e2ce由刚刚测试的人async所以他们将其与同步代码混合在一起。

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

Metro 应用程序中的异步调用链接 的相关文章

随机推荐

  • 从 r 中的二高斯混合生成样本(MATLAB 中给出的代码)

    我正在尝试 在 r 中 创建与以下 MATLAB 函数等效的函数 该函数将从 N m1 s1 2 和 N m2 s2 2 与分数的混合物生成 n 个样本 alpha 来自第一个高斯 我有一个开始 但 MATLAB 和 R 之间的结果明显不同
  • Knockout 无法处理绑定

    当文本未定义时如何绑定文本 例如名称不可用 table class table thead tr th class col md 4 ID th th class col md 4 Name th tr thead tbody tr td
  • 使用 moment.js 进行 Jasmine 约会模拟

    我在应用程序中使用 moment js 来处理日期 时间 但它似乎与 Jasmine 的模拟功能配合得不好 我在下面整理了一个测试套件来显示我的问题 jasmine clock mockDate似乎暂时不起作用 但它可以很好地工作Date
  • 在 Android 中使用 DOM 解析器

    我使用 DOM 解析器从 XML 文件中检索信息 如下所示
  • 如何将所有提交从一个分支移动到另一个分支?

    场景是这样的 X1 X2 X3 X4 X5 X6 master D1 D2 D3 dev B1 B2 B3 bug1 我想将所有提交移至bug1分支到 master 分支并删除 bug1 分支 在这种情况下 X1 X2 X3 X4 X5 X
  • DataGrid 周围的 WPF ScrollViewer 影响列宽

    我使用 ScrollViewer 来滚动包含数据网格的用户控件时遇到问题 如果没有滚动查看器 列会按照我想要的方式填充数据网格 但是当添加滚动查看器时 列会缩小到约 15 像素 我能够简化我的布局 并且仍然可以重现这种行为 将数据网格宽度绑
  • 用户单击 Office 应用程序中的链接时未找到 OpenIdConnect 相关 Cookie

    我有一个使用 OpenIdConnect 向 Azure Active Directory 进行身份验证的应用程序 一切工作正常 除非我从 Office 应用程序 excel word 链接到我的网站 从这些应用程序中 我收到 异常 关联失
  • Typescript 泛型 keyof 与类型不匹配

    我有这个接口 它只存储另一个接口的密钥 modelKey 和该键的值 value interface ValueHolder
  • php cron 作业也执行 javascript

    我有一个运行 php 脚本的 cron 作业 但是我需要执行一些 html 和 javascript 才能使实际脚本正常工作 将 javascript 转换为 php 不是一个选项 基本上我需要它就像一个人在每次 cronjob 运行时正在
  • NSTableView 重绘不更新显示,选择粘贴

    尽管我知道这个问题的解决方案 但我很感兴趣是否有人可以向我解释这个解决方案 我也想把这个问题弄清楚 因为我在网上找不到任何关于这个问题的提及 而且我花了几天的时间才找到这个问题 我有一个 NSTableView 在重绘及其选择方面表现得很奇
  • 这是尾递归吗?

    我试图找到尾递归的例子 但我真的没有看到常规和尾递归之间的区别 如果这不是尾递归 有人能告诉我为什么不是吗 public static long fib long index assume index gt 0 if index 0 Bas
  • System.Diagnostics.Activity 在 aspnet core 2.1 中为空

    我们刚刚将 aspnet core 2 0 应用程序更新到 2 1 并且在使用 依赖方面遇到了问题System Diagnostics Activity 背景 我们希望跨服务边界传递一致的 关联 ID 以便我们可以关联每个请求的日志条目 我
  • 如何在 WPF 菜单项中禁用助记符?

    我有动态字符串显示为 MenuItem 的标题 其中有时包含 WPF 将下划线视为助记符 但我不希望这样 我如何禁用它 尝试了线程中的所有解决方案后WPF 列表框 跳过字符串中的下划线符号 https stackoverflow com q
  • 一旦禁用了 ios 中的空闲计时器(以允许显示器再次休眠),如何重新启用它?

    我已经找到了如何阻止 iOS 设备进入睡眠状态 见下文 但我在撤消该设置时遇到了麻烦 根据苹果文档 https developer apple com documentation uikit uiapplication 1623070 id
  • 在 emacs python-mode 中不正确地退出缩进

    我正在使用 Emacs python 模式 我在我的中使用它来调用它 emacs add to list load path emacs python mode el 6 0 3 autoload python mode python mo
  • 为什么在测试 ui.sender 时,jquery sortable 中的更新事件似乎运行了两次

    我正在使用 jQuery UI sortable 对连接列表进行排序 更新事件似乎运行了两次 这是完整的可排序调用 pageContent sortable handle quesText connectWith pageContent c
  • JavaScript 性能评估 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Jquery如何通过数组中的属性查找对象

    鉴于我有一系列 目的 对象 array of purpose objects var purposeObjects purpose daily purpose weekly purpose monthly 为了简单起见 我省略了其他属性 现
  • 如何使用 classList 获取 React 组件引用来更改其类?

    我已经创建了一个反应组件使用以下代码 在此我创建选项卡并添加类并将其引用存储在全局命名空间接口中以供进一步处理 var TabBody React createClass getInitialState function return cl
  • Metro 应用程序中的异步调用链接

    我对 Metro 开发很陌生 我只希望能够以一种可以理解的方式表达我的问题 实际上我正在将旧应用程序的一部分移植到 Metro 逻辑部分是一个单独的项目 便携式库 它应该服务于 1 旧的 WPF 应用程序和 2 新的 Metro 应用程序