繁体   English   中英

C#等待任务完成

[英]C# wait for task to complete

我列出了要执行的方法,其中一些是异步方法,需要一些时间才能完成。 但是,我需要这些任务完成,然后程序才能继续执行当前的下一个任务,因为这样会显示旧数据。

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

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 App中的事件,但是在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/zh-cn/library/dd537615( v= vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM