你好,我想使用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;
}
答案 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
。