[英]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.