在Web应用程序中不返回对C#异步方法的调用

我是Amada

我正在VS 2013上的新C#4.5 Web应用程序中尝试异步/等待代码。这是在IISExpress下在我的开发人员计算机上运行的Web应用程序。我在async方法中设置了一个断点,可以看到该方法已按预期完成。但是,等待调用之后的下一行代码似乎没有被命中。我在那里有一个断点,它没有命中,并且我尝试逐步执行代码。它似乎挂在那儿无限地等待着。我尝试在控制台应用程序中运行相同的代码,并且可以正常工作。这使我想知道异步/等待调试在Web应用程序中是否不起作用,或者它是否与IISExpress有关?还是我还缺少其他东西?

该代码非常基本,看起来像这样:

public async Task SomeMethodAsync(string parameter1)
{

}

...调用上述异步方法的代码:

await SomeMethodAsync("some value");
我是Amada

我知道了 导致这种情况的是代码的结构(我的问题中未包括)。它是Web Forms应用程序的事实似乎也是一个因素。原始代码如下所示:

protected void Button1_Click(object sender, EventArgs e)
{
    var task = RunSample();
    task.Wait();
}

private static async Task RunSample()
{
    await SomeMethodAsync("some value");
}

事实证明,当异步方法运行时,代码的执行将task.Wait()在按钮单击处理程序中执行,然后在那里等待。我不会期望代码会在那里(这是我从控制台应用程序复制的代码...)

我决定将RunSample()代码移到按钮单击处理程序中,就像这样,消除了RunSample():

protected async void Button1_Click(object sender, EventArgs e)
{
    await SomeMethodAsync("some value");
}

这导致最初来自编译器的错误,需要将Async =“ true”添加到@Page指令。之后,它按预期开始工作。即使使用我的原始代码,并在其中使用Async =“ true”,该方法也不起作用。我相信关键是要为单击按钮处理程序标记上async关键字。

感谢@NielsFilter和@DaniCE的后续问题,让我进一步研究了这一问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

异步函数在 React 应用程序中不返回

C#:在控制台应用程序主内部调用异步方法导致编译失败

Windows应用商店应用程序C#中的异步

为什么从asp.net c#应用程序进行的Web服务调用返回null?

在C#中的控制台应用程序异步?

从Winform C#应用程序中的Web API调用并获取响应

在C#控制台应用程序中同步返回行为的方法的方法

春季:如何仅在Web应用程序中调用方法?

通用应用程序:从JavaScript调用C#方法

从清洁架构 C# 中的应用程序层调用基础设施项目中的方法

C#应用程序中的Web ActiveX

在Swift应用程序中调用Objective C方法

如何在 Xamarin 应用程序的后台调用异步方法

如何从C#中的控制台应用程序运行Web应用程序

在窗口表单应用程序中多次调用异步方法

如何在ASP.NET Web API应用程序中从另一个方法调用一个异步方法

如何从Android应用程序中的异步任务返回位图

在C中设计“ Web应用程序”后端的方法?

在Java Web应用程序中执行异步操作的最简单方法

从移动应用程序中调用方法

在Django Web应用程序中运行异步python代码

Web应用程序中的异步等待性能

如何在C#异步/等待应用程序中创建循环服务?

在C#中异步调用方法

异步C#方法不返回字符串

Android返回应用程序调用方法

如何在C ++ / CLI DLL中从C#应用程序调用函数?

从 C# 应用程序调用 C++ DLL

在应用程序启动后调用异步方法的最佳模式是什么?(构造函数中的 Fire&Forget?)