并发异步执行更多任务

时间:2014-06-26 06:11:50

标签: android-asynctask

你好,我想使用TCP向更多的IP发送消息,我希望消息并发异步发送到IP,而不是逐个发送。

  @Override
protected Boolean doInBackground(String... params) {



        for(int i=0;i<CommonUtil.ipList.size();i++){

            if(!CommonUtil.ipList.get(i).equals(fromIp)){

               TCPUDPCommunicate.sendSingleMessage(CommonUtil.ipList.get(i), CommonUtil.local_port, xmldata);


        return true;

    }else {
        Log.i("ee","CommonUtil.ipList.get(i) is null");
        return false;

    }

1 个答案:

答案 0 :(得分:0)

如果您使用的是.NET 4.0或更高版本,则可以使用Parallel.ForEach()。它应该让您免于在固定数量的线程上批量处理任务的担忧。

在这里查看:http://msdn.microsoft.com/en-us/library/dd460720%28v=vs.110%29.aspx

代码看起来像这样。

int notFromIpCount = 0;

Parallel.ForEach(CommonUtil.ipList, ip => 
{
    bool isNotFromIp = !ip.equals(fromIp);

    if (isNotFromIp)
    {
        TCPUDPCommunicate.sendSingleMessage(ip, CommonUtil.local_port, xmldata);
        Interlocked.Increment(ref notFromIpCount); 
    }
    else 
    {
        // Log message
    }
}

return notFromIpCount > 0;

任务并行库在附加调试器的情况下有点慢,但在没有调试器的情况下在发布模式下对其进行分析,与手动创建的线程相比,您几乎看不到性能差异。

PS。日志消息令人困惑。如果CommonUtil.ipList.get(i)null,则您的代码会引发NullReferenceException