我在VS 2013上的新C#4.5 Web应用程序中尝试异步/等待代码。它是在IISExpress下的我的开发人员计算机上运行的Web应用程序。我在异步方法中设置断点,可以看到方法按预期完成。但是,等待调用之后的下一行代码似乎没有被击中。我在那里有一个断点,它没有被击中,我试图逐步完成代码。它似乎挂在那里等待无限。我尝试在控制台应用程序中运行相同的代码,这是有效的。 这让我想知道async / await调试是否在Web应用程序中不起作用,或者它是否与IISExpress有关?或者还有其他我想念的东西?
代码很基本,看起来像这样:
public async Task SomeMethodAsync(string parameter1)
{
}
...调用上述异步方法的代码:
await SomeMethodAsync("some value");
答案 0 :(得分:0)
我得到了它的工作。这是代码的结构(不包括在我的问题中)导致了这一点。它是一个Web窗体应用程序的事实似乎也是一个因素。原始代码看起来像这样:
protected void Button1_Click(object sender, EventArgs e)
{
var task = RunSample();
task.Wait();
}
private static async Task RunSample()
{
await SomeMethodAsync("some value");
}
事实证明,当async方法正在运行时,代码的执行将转到按钮单击处理程序中的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的后续问题让我进一步了解这一点。