Объясните разницу между двумя подходами к вызову асинхронных операцийC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Объясните разницу между двумя подходами к вызову асинхронных операций

Сообщение Anonymous »

У меня есть два варианта кода, которые будут представлены ниже.
Задача кода заключается в следующем: у меня есть два URL-адреса, по которым я делаю HTTP-запрос Get, и Я хочу получить оттуда контент.
В первом случае я использую Task.WhenAll и передаю два асинхронных вызова метода, ожидая выполнения моих задач. выполняться параллельно и в разных потоках.
Но судя по выводу, все они выполняются в основном потоке, его id = 1.
В во втором случае я использую await и ожидаю, что мои задачи будут выполняться последовательно, но одновременно.
Хотя сама суть await заключается в ожидании выполнения операции без блокировки основного потока.
Поясните, пожалуйста, где я ошибаюсь и какой вариант предпочтительнее для такой задачи?
Метод (один и тот же в обоих случаях)
< pre class="lang-cs Prettyprint-override">public static async Task FetchDataFromUrl(string url)
{
await Console.Out.WriteLineAsync(Thread.CurrentThread.ManagedThreadId.ToString());
try
{
using (HttpClient client = new HttpClient())
{
return await client.GetStringAsync(new Uri(url));
}
}
catch (Exception ex)
{
await Console.Out.WriteLineAsync(ex.Message);
throw;
}
}

Вызов метода №1
string url1 = "https://jsonplaceholder.typicode.com/posts/1";
string url2 = "https://jsonplaceholder.typicode.com/comments/1";

var results = await Task.WhenAll(FetchDataFromUrl(url1), FetchDataFromUrl(url2));

Вызов метода №2
string url1 = "https://jsonplaceholder.typicode.com/posts/1";
string url2 = "https://jsonplaceholder.typicode.com/comments/1";

List results = new List
{
await FetchDataFromUrl(url1),
await FetchDataFromUrl(url2),
};


Подробнее здесь: https://stackoverflow.com/questions/786 ... nous-opera
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Объясните разницу между двумя подходами к вызову асинхронных операций.
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Объясните разницу между двумя подходами к вызову асинхронных операций.
    Anonymous » » в форуме C#
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Понимаете разницу между двумя подходами к реализации потоков в Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Понимаете разницу между двумя подходами к реализации потоков в Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Понимаете разницу между двумя подходами к реализации потоков в Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»