我无法通过邮递员从Webform异步方法返回列表。它会永远持续下去。 我在这里错过了一些非常棘手的东西吗?
页面加载:
protected void Page_Load(object sender, EventArgs e)
{
RegisterAsyncTask(new PageAsyncTask(testAsync));
if (Request["Act"] == "testAsync")
{
Response.Write(JsonConvert.SerializeObject(testAsync()));
Response.End();
}
}
方法:
private async Task<List<string>> testAsync()
{
List<string> list = await Task.Run(() => {
var _return = new List<string>();
_return.Add("1");
_return.Add("2");
return _return;
});
return list;
}
然后我将aspx页面标记为 Async =“ true”
这是邮递员http:// localhost:65008 / services / carrental / callBackHandler.aspx?act = testAsync 中的URL
解决方案 在E.J. Brennan建议之后,我已经更新了我的代码。有效。首先,我调用了async方法,然后在方法执行后返回了List。
PageLoad
protected void Page_Load(object sender, EventArgs e)
{
RegisterAsyncTask(new PageAsyncTask(testAsync));
if (Request["Act"] == "testAsync")
{
var a = testAsync();
}
}
方法
private async Task<List<string>> testAsync()
{
List<string> list = await Task.Run(() => {
var _return = new List<string>();
_return.Add("1");
_return.Add("2");
return _return;
});
Response.Write(JsonConvert.SerializeObject(list));
Response.End();
return list;
}
答案 0 :(得分:2)
您正在异步调用'testAsync'函数,但立即调用response.end-您需要等待testAsync()函数完成,否则在该函数有机会运行之前发送response.end