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是一个全局变量

c#等待任务完成

我不知道你的任务是在不同的线程上运行,但理论上当你有一个线程,你想做一些事情后,它完成了执行它的任务,你使用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