我想使用iOS SDK解析DNS SRV记录.
我已经尝试过Apple提供的高级Bonjour API,但它们并不是我需要的.现在我正在使用DNS SD.
void *processQueryForSRVRecord(void *record) {
DNSServiceRef sdRef;
int context;
printf("Setting up query for record: %s\n", record);
DNSServiceQueryRecord(&sdRef, 0, 0, record, kDNSServiceType_SRV, kDNSServiceClass_IN, callback, &context);
printf("Processing query for record: %s\n", record);
DNSServiceProcessResult(sdRef);
printf("Deallocating query for record: %s\n", record);
DNSServiceRefDeallocate(sdRef);
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
只要它只获得正确的SRV记录(例如:_xmpp-server._tcp.gmail.com),就可以正常工作,但是当记录键入错误时,DNSServiceProcessResult(sdRef)会进入无限循环.
有没有办法停止DNSServiceProcessResult或者我必须取消调用它的线程吗?
我已经实现了一个 Java 流管道,其中对一些元素进行排序并检查它们是否全部满足谓词。管道看起来像这样:
items.stream()
.sorted(this::sortByType)
.allMatch(this::isCompliant);
Run Code Online (Sandbox Code Playgroud)
谓词的验证在成本上有所不同。有些元素只需要检查属性,对于其中一些元素,我也必须从数据库中获取可能的许多元素并评估它们。
因为我需要知道所有这些都是真的,所以知道至少有一个是假的,是等价的。如果我正确理解了 allMatch() 操作的 JavaDoc,那么一旦一个元素为 false,它就应该短路。
因此,为了潜在地提高执行速度,我对元素进行排序,以便首先执行所有非常简单的验证,并且只有当它们全部成功时,我才执行成本更高的验证。
至少我认为是这样的。然而,我的 IDE 告诉我,调用 allMatch() 之前进行排序是多余的,因为它不依赖于排序顺序。
我编写了一些测试,这些测试似乎表明在遍历管道时实际上考虑了排序顺序,但也许我的测试用例太小或者只是碰巧被正确调用。
所以我的问题是: allMatch() 是否考虑预先施加的排序顺序?还是它忽略了它?