为什么等待 - 如果抛出异常,ed操作不会返回?

时间:2014-11-07 07:46:28

标签: asp.net vb.net parallel-processing async-await

我陷入了并行编程世界。我在这里(以及其他网站上)已经阅读了许多类似的问题和答案,但是我们无法解决以下问题。

我使用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仍然没有中断:/

0 个答案:

没有答案