循环调用异步任务?

用户名

我想循环调用一个异步任务,并并行执行几次。

我有一个项目列表,我将其分成较小的列表,每个列表中有10个项目。然后,对于每个小列表,我使用THREAD_POOL_EXECUTOR执行异步任务。

问题是,它不起作用。我在想这是因为每次将其传递给AsyncTask时,我都会使用相同的列表-并且我认为它可以作为参考传递。

我是否需要以某种方式动态创建新列表?

   //split the ListItems into 10s
        if (actualThumbs.size() > 10){

        List<List<ListItem>> parts = chopped(actualThumbs, 10); // this splits it into parts of 10
        List< ListItem > listToSend  = new ArrayList<ListItem>(); //this is the list to pass
    for(int i = 0; i < parts.size(); i++){ //for every part


        for(int x = 0; x < parts.get(i).size(); x++){ //for everything in that part
            //add to its own List
            listToSend.add(parts.get(i).get(x));

        }
        //this is the async task
        loadActualThumbs thumbs = new loadActualThumbs();
        //execute multiple threads
        thumbs.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,listToSend );
        listToSend.clear(); //clearing the list ready for a new one - PROBLEM?
     }
    }
    else
    {
        //else just execute AsyncTask normally, this works OK
        loadActualThumbs thumbs = new loadActualThumbs();
        thumbs.execute(actualThumbs);
    }

编辑:
我尝试更改我的代码,以代替将要发送到异步任务的每个列表添加到另一个列表,然后遍历该列表列表并发送每个列表:

 if (actualThumbs.size() > 10){

                List<List<ListItem>> parts = chopped(actualThumbs, 10);
                List< ListItem > listToSend  = new ArrayList<ListItem>();
                List<List<ListItem>> sendMe = new ArrayList<List<ListItem>>();
            for(int i = 0; i < parts.size(); i++){ //for every part


                for(int x = 0; x < parts.get(i).size(); x++){ //for everything in that part
                    //add to its own ListItem?
                    listToSend.add(parts.get(i).get(x));

                }

                sendMe.add(listToSend);// add the List to this List
                listToSend.clear();
             }

                for(int e = 0; e<sendMe.size();e++){ //loop through the list of lists

                    loadActualThumbs thumbs = new loadActualThumbs();
                    //execute multiple threads?
                    thumbs.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,sendMe.get(e) ); // execute async with correct List
                }

            }

            else
            {
                if (actualThumbs.size() > 0){
                //load actual thumbnails
                loadActualThumbs thumbs = new loadActualThumbs();
                thumbs.execute(actualThumbs);
                }

            }
杜杜力诺

您的代码现在应如下所示:

List<List<ListItem>> parts = chopped(actualThumbs, 10);
for(List<ListItem> list : parts) {

    new loadActualThumbs().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, list);

}

我实际上不确定线程​​池的大小或它是否是缓存的线程池,但是您可以使用Executors.newCachedThreadPool()和Executors.newFixedThreadPool(int count)创建自己的线程池...但是我只想使用AsyncTask.THREAD_POOL_EXECUTOR ....应该工作:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

异步任务循环

来自分类Dev

在循环内,是否使用任务的continuewith将每个异步调用链接到返回的任务?

来自分类Dev

异步任务跟不上for循环(firebase)

来自分类Dev

从异步任务调用活动

来自分类Dev

反复调用异步任务

来自分类Dev

调用异步任务并等待答案

来自分类Dev

如何调用异步任务函数?

来自分类Dev

按任务调用异步操作

来自分类Dev

调用异步时JavaScript循环

来自分类Dev

异步调用并行for循环

来自分类Dev

异步调用的同步循环

来自分类Dev

循环内异步调用

来自分类Dev

parallel.for循环内的异步任务

来自分类Dev

如何在循环中异步运行任务?

来自分类Dev

parallel.for循环内的异步任务

来自分类Dev

异步与循环功能任务列表节点js

来自分类Dev

Javascript 中异步任务的 for..in 循环

来自分类Dev

如何从celery任务异步调用url

来自分类Dev

带有同步方法调用的异步任务

来自分类Dev

TPL异步等待-异步任务是否必须链接调用堆栈?

来自分类Dev

循环中的AngularJS异步调用

来自分类Dev

jQuery异步AJAX调用的While循环

来自分类Dev

循环中的异步调用延迟

来自分类Dev

在循环中调用异步函数的useEffect

来自分类Dev

处理循环内的异步调用

来自分类Dev

循环异步调用并加入返回的promise

来自分类Dev

循环python中的异步API调用

来自分类Dev

在循环中以异步 AJAX 调用为目标

来自分类Dev

异步任务中的while循环阻止另一个异步任务的执行