我有一个Asp.Net Web表单应用程序,在我的页面的Page_Load event
中,我有以下代码
protected async void Page_Load(object sender, EventArgs e)
{
var data = await ChartDataHelper.GetBidsAverageCycle("2018", "Q4",
"Fiscal");
SomeSyncOperation();
}
这是主要方法
public static async Task<List<BidAveragceCycleModel>> GetBidsAverageCycle(string year, string quarter, string yearType)
{
SqlParameter parameter1 = new SqlParameter("@RequestData", BuildMonthsFilter(year, quarter, yearType));
var data =await Entities.Current.ExecuteStoreQueryAsync<BidAveragceCycleModel>("exec Dashboard_Bids_AverageCycleTime @RequestData"
, new[] { parameter1 });
return data.ToList();
}
我在考虑使用await on the ExecuteStoreQueryAsync will return the control back to Page_Load and call SomeSyncOperation()
,但看起来它在synchronous fashion
中运行,10秒后Stored Proc返回数据然后调用data.ToList()
然后只返回Page_Load
调用。
有人可以告诉我这里我做错了什么。
谢谢
在Stored Proc返回数据10秒后,它会调用data.ToList()然后只返回到Page_Load调用。
这就是async
/ await
的工作原理。
如果你想在加载Page_Load
之前完成data
,那么你可以做的是存储一个Task<List<BidAveragceCycleModel>>
并让Page_Load
分配该任务变量(没有await
ing它)。然后,当需要该数据时,代码可以await
那Task<T>
。