public Object
sendAsync(final Message query, final ResolverListener listener) {
	final Object id;
	synchronized (this) {
		id = uniqueID++;
	}
	Record question = query.getQuestion();
	String qname;
	if (question != null)
		qname = question.getName().toString();
	else
		qname = "(none)";
	String name = this.getClass() + ": " + qname;
	Thread thread = new ResolveThread(this, query, id, listener);
	thread.setName(name);
	thread.setDaemon(true);
	thread.start();
	return id;
}
Asynchronously sends a message to a single server, registering a listener
to receive a callback on success or exception.  Multiple asynchronous
lookups can be performed in parallel.  Since the callback may be invoked
before the function returns, external synchronization is necessary.
@param query The query to send
@param listener The object containing the callbacks.
@return An identifier, which is also a parameter in the callback
src/main/java/core/org/xbill/DNS/SimpleResolver.java