我陷入了并行编程世界。我在这里(以及其他网站上)已经阅读了许多类似的问题和答案,但是我们无法解决以下问题。
我使用ApiController
方法开发ASP.NET async
,如下所示:
<Route("signup")>
Public Async Function SignUpAsync(RegistrationInfo As RegisterAccountDto) As Task(Of IHttpActionResult)
Dim result As IHttpActionResult = BadRequest()
Dim userManager = HttpContext.Current.GetOwinContext().Get(Of UserManager)()
If ModelState.IsValid Then
Dim candidate As New User
With candidate
.Email = RegistrationInfo.Email
.UserName = RegistrationInfo.UserName
End With
Dim x = Await userManager.CreateAsync(candidate, RegistrationInfo.Password)
result = Ok()
End If
Return result
End Function
我故意在CreateAsync
方法中发生异常 - 即我已将User
类扩展为包含一些强制(NOT NULL
)属性,但是我没有提供他们的价值观。
显然,在输出窗口中显示了关于缺失值的多个异常。
我的问题是,Dim x = Await userManager.CreateAsync(candidate, RegistrationInfo.Password)
行之后的代码永远不会被执行,也不会抛出异常。
通过Fiddler,我正在对上述方法发出POST请求。返回的结果是500(内部服务器错误),在给定的情况下似乎是正确的。但是,为什么我的代码中没有收到这些错误?
我读过的主题上的大部分帖子都在传播ConfigureAwait(False)
。
我试一试 - 没有运气。
此外,我确保我定位框架版本4.5 - 实际上我的目标是4.5.1
我已经读过Async Sub
(C#中的async void
方法)的行为与我所描述的相似,
但我的方法是Async Function
并返回Task(Of T)
我在<ThrowUnobservedTaskExceptions enabled="true" />
下的<runtime>
进入了web.config - 再次,没有变化。
所以,正如我所说 - 我被困住了。有什么想法吗?
事实证明,问题根本不在于等待的行动中。我的第一篇文章并不正确,因为我说过例外不是抛出。它们是,但VS 2013不会中断,无论异常是在同步还是异步代码中。这继续令我惊讶。可能我的VS设置有些东西,我希望。
到目前为止,我仔细检查了启用工具 - &gt;选项 - &gt; Debbuging - &gt; Just My Code and Debug - &gt;例外 - &gt;用户未处理被检查,但是当我引入Throw New ArgumentException
代替等待的操作时VS仍然没有中断:/