如何从其他类等待异步进程?

时间:2013-06-07 00:20:13

标签: c# asynchronous

我有两个班级

Parser.cs:

....
client.DownloadStringCompleted += (sender, e) =>
{
    Result = JsonConvert.DeserializeObject<Flight>(e.Result);
};

client.DownloadStringAsync(new Uri(uri));

和Main.cs:

...
var p = new Parser();
p.Parse();

someMethod(p.Result);

当Parser.cs中的DownloadStringAsync完成后,如何运行 someMethod

1 个答案:

答案 0 :(得分:2)

这是通过使用Task Parallel Library

来完成的

您可以将Parse方法更改为:

Task<string> ParseAsync()
{
    return client.DownloadStringTaskAsync(new Uri(uri));
}

然后你的主要方法:

var p = new Parser();
var parseTask = p.Parse();

//This will block the current thread until Result is available
someMethod(parseTask.Result); 

或者如果您不想阻止当前线程,可以使用continuation:

var p = new Parser(); 
var parseTask = p.Parse(); 
parseTask.ContinueWith(task => someMethod(task.Result));

这一切都假设.Net 4.5。