@IvankoPo

Почему метод выполняется в главном потоке?

public partial class MainWindow : Window
    {

        public async Task<List<String>> getDataa()
        {
            var client = new RestClient("http://url");
            var request = new RestRequest("getTopics/", Method.POST);
            var path = @"D:\Dataset\entertainment_news_article_10355.txt";
            request.AddFile(path, path);
            var response2 = await client.ExecuteTaskAsync<List<String>>(request);
            return response2.Data;
        }
        public MainWindow()
        {
            InitializeComponent();
            BT.Click += async (sender, e) =>
            {
                List<String> res = await getDataa();
                LB.ItemsSource = res;
            };
        }

Почему метод getData выполняетя в главном потоке, если методы с async.
Как изменить код чтобы getDataa(); вызывался асинхронно ?
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ответы на вопрос 2
ApeCoder
@ApeCoder
Асинхронность не значит мультитредность.
https://docs.microsoft.com/ru-ru/dotnet/csharp/async

Если ваша задача ограничена ресурсами процессора и вам важна скорость реагирования, используйте async и await, но перенесите выполнение задачи в другой поток с конструкцией Task.Run. Если к задаче применим параллелизм, также можно рассмотреть возможность использования библиотеки параллельных задач.
Ответ написан
Комментировать
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
Явный баг библиотеки, которой вы пользуетесь. Если метод, выполняющий сетевую операцию, заявлен авторами как асинхронный, то никакой блокировки вызывающего потока быть не должно.

Во избежание подобных сюрпризов сторонними библиотеками не пользуюсь. Да, приходится больше грязной работы делать руками. Но, как правило, делается это все один раз, после чего легко переиспользуется.

Вам же сейчас придется разгребать руками чужой говнокод с гитхаба. Большой вопрос - кто потратит больше времени - вы или я?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы