如何为其他开发人员提供异步方法
本文关键字:异步方法 开发 其他 | 更新日期: 2023-09-27 17:51:26
现在,我的库CherryTomato是我想要的地方,现在我想提供异步方法供其他开发人员使用。
目前他们是这样使用它的:
string apiKey = ConfigurationManager.AppSettings["ApiKey"];
//A Tomato is the main object that will allow you to access RottenTomatoes information.
//Be sure to provide it with your API key in String format.
var tomato = new Tomato(apiKey);
//Finding a movie by it's RottenTomatoes internal ID number.
Movie movie = tomato.FindMovieById(9818);
//The Movie object, contains all sorts of goodies you might want to know about a movie.
Console.WriteLine(movie.Title);
Console.WriteLine(movie.Year);
我可以用什么来提供异步方法?理想情况下,我想触发加载,并让开发人员侦听事件触发,当它触发时,他们可以使用完全加载的信息。
下面是FindMovieById的代码:public Movie FindMovieById(int movieId)
{
var url = String.Format(MOVIE_INDIVIDUAL_INFORMATION, ApiKey, movieId);
var jsonResponse = GetJsonResponse(url);
return Parser.ParseMovie(jsonResponse);
}
private static string GetJsonResponse(string url)
{
using (var client = new WebClient())
{
return client.DownloadString(url);
}
}
处理这个问题的标准方法是使用AsyncResult模式。它在整个。net平台中使用,请查看这篇msdn文章以获取更多信息。
在。net 4中,您还可以考虑使用IObservable<>
与响应式扩展一起使用。对于初学者来说,从这里抓取WebClientExtensions。你的实现是非常相似的:
public IObservable<Movie> FindMovieById(int movieId)
{
var url = String.Format(MOVIE_INDIVIDUAL_INFORMATION, ApiKey, movieId);
var jsonResponse = GetJsonResponse(url);
return jsonResponse.Select(r => Parser.ParseMovie(r));
}
private static IObservable<string> GetJsonResponse(string url)
{
return Observable.Using(() => new WebClient(),
client => client.GetDownloadString(url));
}