问题标签 [async-ctp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
348 浏览

c# - 什么会导致标记为 async 的方法同步执行,即使它包含等待调用?

我正在尝试调试我的同事不在时编写的一些代码。

这是电话:

这是方法签名:

该方法运行大约需要 20 秒,根据我在上面引用的第一行之前和之后放置的日志记录,该任务正在同步执行,就好像该async部分被忽略了一样。什么会导致这种情况发生?

请注意,await异步方法内部有一个调用。它在一个while循环内,但我无法想象这会有所作为。

此外,我创建了一个小型测试应用程序,它运行一个非常简单的 async/await 设置,以确保 await 在我正在运行它的服务器上实际工作,并且它在我的小测试用例中正常工作,只是在主用例中没有我正在尝试调试的应用程序。

0 投票
1 回答
3821 浏览

c# - 异步 CTP - 推荐的任务调度方法

我目前正在开发一个在整个过程中都使用 TAP 的异步应用程序。每个具有Task生成 s 的方法的类也都有一个TaskScheduler注入方法。这使我们能够执行明确的任务调度,据我所知,这不是微软使用 Async CTP 的方式。

我对新方法(隐式调度)的唯一问题是我们以前的理念一直是“我们知道延续将始终指定他们的任务调度程序,所以我们不需要担心我们在什么上下文中完成任务” .

摆脱这一点确实让我们有些担心,因为它在避免细微的线程错误方面工作得非常好,因为对于每一段代码,我们可以看到编码人员已经记住考虑他在哪个线程上。如果他们错过了指定任务调度程序,这是一个错误。

问题 1:谁能向我保证隐式方法是个好主意?我看到 ConfigureAwait(false) 和遗留/第三方代码中的显式调度引入了很多问题。例如,如何确定我的“等待缠身”代码始终在 UI 线程上运行?

问题 2:那么,假设我们TaskScheduler从代码中删除所有 DI 并开始使用隐式调度,那么我们如何设置默认任务调度程序?如果在方法中途更改调度程序,就在等待一个昂贵的方法之前,然后再将其设置回来呢?

(ps 我已经阅读了http://msmvps.com/blogs/jon_skeet/archive/2010/11/02/configuring-waiting.aspx

0 投票
2 回答
439 浏览

c# - 异步快速路径

这是一篇关于异步 CTP 刷新如何利用异步“快速路径”的文章

它提到了更高的效率等,但我什至不知道“快速路径”是什么?我想确定文章中的提示是否与我相关,但真的找不到“快速路径”的解释

0 投票
1 回答
688 浏览

c# - 异步 CTP - 环境 CancellationToken 和 IProgress

记住 Async CTP 通过环境促进隐式调度SynchronizationContext,有什么理由我不应该让我的CancellationTokenIProgress环境呢?

我目前正在通过方法传递这些,就像我正在传递一个TaskScheduler明确的调度。但是,既然调度程序现在应该是环境的,我可能不会对拼图的其他部分遵循相同的规则吗?

0 投票
1 回答
320 浏览

c# - C# 代码利用 Async CTP 并抛出 InvalidOperationException "Task_Start_NullAction"

我调用 QueryJourneys 对 d2 进行异步调用,但是在尝试使用 WebClient 下载某些内容 (XML) 时失败,也是异步的。

我收到异常InvalidOperationException,字符串“Task_Start_NullAction”作为唯一消息。

怎么了?

调用代码:

抛出异常的代码:

0 投票
1 回答
256 浏览

.net - 将现有的异步方法包装到与 TPL 兼容的方法中

如何将接受回调函数作为参数的现有异步方法包装到与任务并行库兼容的方法中?

0 投票
2 回答
981 浏览

c# - 为什么异步 CTP 表现不佳?

我真的不明白为什么await,也没有像他们应该的那样async提高我的代码的性能。

尽管持怀疑态度,但我认为编译器应该重写我的方法,以便并行完成下载......但似乎这实际上并没有发生。
确实意识到这一点await并且async不创建单独的线程;但是,操作系统应该并行进行下载,并在原始线程中回调我的代码——不是吗?

我是否使用async不当await?使用它们的正确方法是什么?

代码:

输出:

0 投票
0 回答
822 浏览

c# - CallContext - 今后使用此功能的建议是什么?

有谁知道在即将发布的 .NET 版本中是否计划支持在环境执行上下文中存储对象?正如以下页面中所强调的那样,确实需要它:

CallContext 的限制:https ://connect.microsoft.com/VisualStudio/feedback/details/276325/provide-better-context-support-to-async-operations

隐式与显式上下文: http: //msmvps.com/blogs/jon_skeet/archive/2010/11/08/the-importance-of-context-and-a-question-of-explicitness.aspx

可以添加到环境执行上下文的对象类型有:

  • 那些不适合DI的。即应该由调用站点定义的外部依赖项,但以某种方式横切应用程序域,这使得它们无法作为方法参数传递。示例:CancellationToken、IProgress、事务、SynchronizationContext、SecurityContext。(事实上​​, ExecutionContext 已被硬编码以传递后两者......为什么不能为自定义代码公开开放集合的任何充分理由?)
  • 那些被发出到方法体中的通用代码使用的那些......不知道作为外壳方法的参数可用的显式依赖关系或其声明类型的属性的代码。考虑 AOP 世界中的 PostSharp Aspects。

很高兴听到人们对此的想法:)

编辑: 也在这里发布了问题:http: //social.msdn.microsoft.com/Forums/en-US/async/thread/ea21ca57-5340-439c-8ee9-f0185b5787a1

0 投票
2 回答
1133 浏览

c# - 为隐式调度方法显式指定 TaskScheduler

我有以下使用隐式调度的方法:

但是,从一个特定的呼叫站点,我希望它在低优先级调度程序而不是默认调度程序上运行:

我如何实现这一目标?这似乎是一个非常简单的问题,但我有一个完整的心理障碍!

注意:我知道该示例实际上不会编译:)

0 投票
2 回答
509 浏览

system.reactive - rx 反应式扩展:如何让每个订阅者从 observable 中获得不同的值(下一个)?

使用响应式扩展,很容易订阅同一个 observable 2 次。当 observable 中有一个新值可用时,两个订阅者都会使用相同的值调用。

有没有办法让每个订阅者从这个 observable 中获得不同的值(下一个)?

例如我所追求的:
源序列:[1,2,3,4,5,...](无限)
源不断以未知的速度添加新项目。
我正在尝试使用 N 个订阅者为每个项目执行一个冗长的异步操作。

第一个订阅者:1,2,4,...
第二个订阅者:3,5,...
...

第一个订阅者:1,3,...
第二个订阅者:2,4,5,...
.. .

第一个订阅者:1,3,5,...
第二个订阅者:2,4,6,...