我想将一个非常静态的DownloadString()
调用转换为DownloadStringAsync()
,但无法按照我的意愿获得流量。
目前,我在 lot 的地方执行以下操作:
string apiurl = "http://api.gowalla.com/spots/" + spot;
var entries = JsonConvert.DeserializeObject<SpotInfo>(CallGowalla(apiurl));
return entries;
CallGowalla
看起来像这样:
private static string CallGowalla(string apiurl)
{
var wc = new WebClient();
wc.Headers["Accept"] = "application/json";
wc.Headers["ContentType"] = "application/json";
wc.Headers["Authorization"] = CreateAuthorizationString();
wc.Headers["-Gowalla-API-Key"] = ConfigurationManager.AppSettings["api"].ToString();
var raw = wc.DownloadString(apiurl);
return raw;
}
我在通话时遇到了挂机,所以我想将DownloadString
移到DownloadStringAsync
,我不确定从哪里开始,而不会将所有通话转移到{{1}整个过程。
有什么想法吗?
关于建筑和重构的建议也欢迎......
答案 0 :(得分:1)
您可能想要考虑如何调用CallGowalla()方法。以异步方式开始调用此方法可能更容易。请查看this Microsoft KB文章中的一些示例。你的CallGowalla()方法相当于那些样本中的LongRunningMethod()。
在某些环境(如ASP.NET)中,异步运行方法(可能使用其他线程)可能会出现问题。研究依赖于您环境的问题非常重要。如果您正在尝试获得更高的吞吐量(更多调用Gowalla),那么您可能希望使用ThreadPool来执行您的方法而无需管理线程。这样做的问题是您可能会很快超出Gowalla API限制。如果您可以提供更多关于为何需要进行这些调用的详细信息,那将是一件好事。
如果您需要使用C#进行线程概述,可以使用free book。