C#等待任务完成

时间:2014-06-08 10:34:36

标签: c#

我有一个要执行的方法列表,其中一些是异步方法,需要一段时间才能完成。但是,我需要在程序进入下一个任务之前完成这些任务,因为此时正在执行旧数据。

有关如何执行此操作的任何提示?这些是我的任务。我需要前三个任务才能在最后两个执行之前完成处理。

public MainPage()
{
    this.InitializeComponent();
    getTemp();
    data = new initialData();            

    SetLiveTile();
    liveTile();           
}

PS:这适用于Windows 8 metro app

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

3 个答案:

答案 0 :(得分:1)

我不知道你的哪些任务是在不同的线程上运行的,但理论上当你有一个线程,并且你想在完成任务后做某事时,你使用thread.join( )方法(很像Java)。

答案 1 :(得分:0)

我真的不知道Windows应用商店应用中的事件,但是在Windows窗体中,您可以在加载时添加异步事件处理程序,例如 - 假设我们有这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
}

我希望这至少可以给你一个想法。

答案 2 :(得分:0)