我正在处理C#.net中的场景,其中我正在加载一个页面,并且在该页面加载事件期间,正在调用一个服务来填充用于在页面上显示的值。
该页面还有其他字段。所以这里的问题是,服务通常需要30到60秒才能返回值,在此服务返回值之前,无法选择其他字段。因此,还有一个“SAVE”按钮无法点击,因为我们仍在等待此服务返回值。
我试图在这里解决的问题是,理想情况下,在页面加载,我希望此服务在后台运行,并让其他字段填充值,我应该能够执行其他事件,如SAVE,NEXT PAGE,PREVIOUS PAGE等等。召唤。
服务返回的值的目的仅供参考。代码对此值没有任何依赖性。
答案 0 :(得分:0)
如果你的服务有一个方法,你可以通过onpageload回调异步来调用它,并等待它内部的异步方法。
如果服务没有异步方法来调用,您可以创建自己的方法,例如:
public string DownloadStringAsync()
{
return "Test data";
}
public async Task<string> ReceiveStringAsync()
{
return await Task<string>.Run(() =>
{
//Method to download your data
return DownloadStringAsync();
});
}
并在您的页面加载中等待它:sting data = await ReceiveStringAsync();
您没有提供足够的信息/代码以获得更好的答案。
答案 1 :(得分:0)
您可以尝试在线程中执行它。像这样的东西
Thread runner = new Thread(() =>
{
// run service call here
});
runner.IsBackground = true;
runner.Start();
但是在C#4.0中有新的任务并行库,所以你可以阅读并从那里开始,技术上一个Task就像一个线程,但区别在于Task可以有继续,以及它管理线程池
在此处阅读TPL:Task Parallelism Library