c#等待任务完成
本文关键字:任务 等待 | 更新日期: 2023-09-27 18:07:17
我有一个要执行的方法列表,其中一些是异步方法,它们需要一段时间才能完成。然而,我需要在程序移动到下一个任务之前完成这些任务,因为它现在正在做,因为旧数据是这样显示的。
关于如何做到这一点有什么建议吗?这些是我的任务。我需要在最后两个任务执行之前完成前三个任务的处理。
public MainPage()
{
this.InitializeComponent();
getTemp();
data = new initialData();
SetLiveTile();
liveTile();
}
PS:这是一个windows 8 metro应用程序
getTemp()的代码如下:我的问题是,在执行其他方法之前,我需要这个方法的值,但在获得值之前,程序继续执行SetLiveTile和liveTile方法。
public async void getTemp()
{
var weatherService = new WeatherService.GlobalWeatherSoapClient();
var result = await weatherService.GetWeatherAsync("", "Malta");
XmlDocument doc = new XmlDocument();
doc.LoadXml(result);
int pos = doc.InnerText.IndexOf(" F");
string rem = doc.InnerText.Remove(0, pos + 4);
string weather = rem.Substring(0, 2);
temp = int.Parse(weather);
}
PS: temp是一个全局变量
我不知道你的任务是在不同的线程上运行,但理论上当你有一个线程,你想做一些事情后,它完成了执行它的任务,你使用thread.join()方法(很像在Java中)。
我真的不知道Windows Store应用程序中的事件,但在Windows Forms中,您可以在加载时添加异步事件处理程序,例如-假设我们有这3个方法需要一些时间来完成:
private Task DoWork() {
return Task.Delay(3000);
}
private Task DoSomeMoreWork() {
return Task.Delay(5000);
}
private Task DoEvenMoreWork() {
return Task.Delay(7000);
}
private async void MyForm_Load(object sender, EventArgs e) {
// this will take 7 seconds it will execute all the methods at the same time and will resume when all are completed
await Task.WhenAll(DoWork(), DoSomeMoreWork(), DoEvenMoreWork());
// will be here when all the methods are done executing
}
我希望这至少能给你一个概念。
您可能还需要检查屏障类:http://msdn.microsoft.com/en-us/library/dd537615(v=vs.110).aspx