Android - Использование await внутри цикла foreach C # - PullRequest
0 голосов
/ 29 апреля 2018

Когда я запускаю этот код, я должен увидеть строку, содержащую некоторые значения, включая цену, которая была добавлена ​​в мой список. Метод getpriceAsync - это метод, который я создал для сбора данных с определенного веб-сайта с использованием JSON, и его нужно ждать, он принимает ссылку в качестве параметра. Я попытался вывести его из цикла foreach, и он работал, он зависает только тогда, когда он находится внутри цикла foreach, хотя он не выдает ошибок и не показывает мне строку в моем списке, которая должна содержать string price , Я не смог разместить выражение await вне цикла, потому что ему нужно имя элемента в качестве параметра. Любое решение моей проблемы, пожалуйста? Спасибо ..

    protected async override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        SetContentView(Resource.Layout.layout);
        string price = "";
        var db = new SQLiteConnection(Class1.dpPath);
        var table = db.Table<Table>();
        foreach(var item in table)
        {
            if(item.value != "0" && item.quantity != "0")
            {
                price = await GetpriceAsync(item.name); // here is the line of the await keyword
                Class1.tableItems.Add(new TableItem(item.quantity, price, "1000"));
            }
        }
    }

1 Ответ

0 голосов
/ 29 апреля 2018

Итак, вы переопределяете метод OnCreate. Этот метод, я полагаю, вызывается во внешнем коде вне вашего контроля.

Метод называется OnCreate, а не OnCreateAsync. Поэтому я подозреваю, что метод вызывается, не ожидая его во внешнем коде.

Либо: * Найти асинхронный вариант этого метода для переопределения. * Используйте Task.WaitAll () для вызова асинхронного метода без превращения метода OnCreate в асинхронный метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...