Простой код для проверки 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]« Я не получаю ожидаемые результаты и с включенным кодом Async. –
@EricSmith Это результат вызова 'ToString' в' Задача' вместо фактического результата. См. Мой ответ. –
i3arnon