Документация DownloadStringTaskAsync и DownloadStringAsync делают довольно хорошую работу, выделяя как сходства, так и различия.
Оба они являются неблокирующими, асинхронными методами. Однако DownloadStringAsync
имеет обратную подпись void и требует, чтобы вы прослушали событие DownloadStringCompleted
, чтобы получить результаты от результата, тогда как метод DownloadStringTaskAsync
возвращает Task<string>
.
Последнее полезно, если у вас есть параллельные асинхронные операции, которые вам нужно ждать, прежде чем продолжить, или если вы хотите позвонить ContinueWith
о выполнении операции после ее завершения. Кроме того, с последним вам также нужно будет получить результат из задачи, как только задача будет в состоянии завершения, которое можно распаковать с ожиданием.
И, наконец, DownloadStringAsync
требует URI, тогда как DownloadStringTaskAsync
примет строку.
Для простоты использования, DownloadStringTaskAsync
вероятно, будет работать нормально, при условии, что вы поместили его в метод асинхронной следующим образом:
void Main()
{
using (WebClient wc = new WebClient())
{
var json = GetGoogleFromTask(wc);
json.Dump();
}
}
public async Task<string> GetGoogleFromTask(WebClient wc)
{
string url = "http://www.google.com" ;
var json = await wc.DownloadStringTaskAsync(url);
return json;
}
Кроме того, вы также можете вернуть только Задачу, так что вы можете продолжить другие операции без необходимости метод асинхронной, который ждет возвращения:
void Main()
{
using (WebClient wc = new WebClient())
{
var json = GetGoogleFromTask(wc);
json.Dump();
}
}
public Task<string> GetGoogleFromTask(WebClient wc)
{
string url = "http://www.google.com" ;
var json = wc.DownloadStringTaskAsync(url);
return json;
}
Не уверен, что я получил вашу точку, поэтому какая задача «DownloadStringTaskAsync» вернется. Например, если я звоню в веб-службу, которая вернет json, так как я могу работать с возвратом json-объекта в качестве задачи? извините за задание много вопросов !! –
@johnG Я уточнил свой ответ, так как поведение DownloadStringAsync не совсем то, чего я ожидал. Я также добавил примеры использования DownloadStringTaskAsync. –
Упростительно, всякий раз, когда вы видите версии метода '* Async' и' * TaskAsync' метода, это означает, что версия '* Async' предшествовала внедрению async-ожидания в C# и использовала шаблон, созданный для создания аналогичного эффекта. Методы 'TaskAsync' были добавлены после асинхронного ожидания и использования async-ожидания. Предыдущие методы остаются для обратной совместимости. –