【发布时间】:2014-12-03 17:21:41
【问题描述】:
检查 URL/网站名称是否有效的简单代码。
此代码(同步代码)完美运行。当我注释同步代码并取消注释 async 代码时,代码无法正常工作。我的async 编程出了什么问题?
class Program
{
static StringBuilder urlStatus = new StringBuilder("");
//public static async Task<string> GetHeadersAsync(string url) //Async Code
public static string GetHeadersAsync(string url) ////Sync Code
{
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "HEAD";
try
{
//using (var response = await request.GetResponseAsync() as HttpWebResponse) //Async Code
using (var response = request.GetResponse() as HttpWebResponse) ////Sync Code
{
if (response != null && response.StatusCode == HttpStatusCode.OK)
return "HTTP_OK";
return "Error";
}
}
catch (WebException ex)
{
return ex.ToString();
}
catch (Exception ex)
{
return ex.ToString();
}
}
static void Main(string[] args)
{
string lineData;
//content of URLList.txt
//http://www.oracle.com
//http://www.oracletest.com
//http://www.cnn.com
//http://www.cnntest.com
using (StreamReader sr = new StreamReader("URLList.txt"))
{
while ((lineData = sr.ReadLine()) != null)
{
var urlRetStatus = GetHeadersAsync(lineData);
urlStatus.Append(lineData + " " + urlRetStatus.ToString() + System.Environment.NewLine);
}
}
System.IO.File.WriteAllText(@"ErrorURL.txt", urlStatus.ToString());
}
}
【问题讨论】:
-
您需要指定您收到的是哪个错误,否则任何人都很难帮助您。我想这表明您错误地使用了异步方法。
-
@ Isantipov,我没有收到错误消息。但它写“System.Threading.Tasks.Task`1 [System.String]”我也没有得到预期的结果,也启用了异步代码。
-
@EricSmith 这是在
Task<string>上调用ToString的结果,而不是实际结果。看我的回答。
标签: c# .net asynchronous async-await c#-5.0