【发布时间】:2018-03-20 17:44:16
【问题描述】:
情况是这样的:
- 我使用第三方库进行一些 SPF 检查
- 检查是从 ASP.NET 网站完成的
- 第三方库使用了大量的“等待/异步”代码,虽然我调用的是非异步方法来完成它
- 大多数情况下,w3wp(是的,实际的 w3wp.exe)只是崩溃并出现以下错误“用于模拟的令牌无效 - 无法复制”。
我假设这是因为等待/异步从线程池中抓取了一个线程,该线程具有某种非法/奇怪的身份,所以我想知道是否有任何方法可以调用一些代码并告诉 .Net '忘记' async/await 并在同一个线程上同步运行它。
【问题讨论】:
-
您可以创建一个自定义同步上下文,但这只有在 库没有通过调用
ConfigureAwait(false)故意避免当前同步上下文时才有效。不幸的是,确实如此往往是推荐的编写库的方式。 -
当问题是如此特定于库和使用时,只有供应商可以为您提供指导(或确认它可以与 ASP.NET 一起使用)。我怀疑这个库根本不是为 ASP.NET 上下文设计的(因为它似乎需要某些模拟设置)。
-
@Damien_The_Unbeliever 似乎该库在源代码中的任何位置都没有包含 ConfigureAwait,因此我将探讨自定义同步上下文的可能性。谢谢你的提示!
标签: asp.net .net asynchronous async-await