В методе
producer.send(ProducerRecord<K,V> record, new Callback() {
public void onCompletion(RecordMetadata metadata, Exception e) {...}
});
обратный вызов вызывается после подтверждения отправки. Обратный вызов выполняется в фоновом потоке ввода-вывода, поэтому он должен быть быстрым (не блокировать его)
По умолчанию отправка выполняется асинхронно, и этот метод сразу же возвращается после сохранения записи в буфере. записей, ожидающих отправки. Это позволяет отправлять много записей параллельно, не блокируя ожидание ответа после каждой.
Send возвращает RecordMetadata, которая указывает раздел, куда отправляется запись, назначенное ей смещение и метку времени.
Это асинхронный подход, в то время как вы можете сделать то же самое, используя синхронный способ:
producer.send(record).get();
Непротестированный, но должен работать...
string methodName = "DoSomething"; // e.g. read from XML
MethodInfo method = typeof(Singleton).GetMethod(methodName);
FieldInfo field = typeof(Singleton).GetField("instance",
BindingFlags.Static | BindingFlags.Public);
object instance = field.GetValue(null);
method.Invoke(instance, Type.EmptyTypes);
Отличная работа. Спасибо.
Вот тот же подход с небольшими изменениями для случаев, когда нельзя иметь ссылку на удаленную сборку. Нам просто нужно знать базовые вещи, такие как полное имя класса (т.е. namespace.classname и путь к удаленной сборке).
static void Main(string[] args)
{
Assembly asm = null;
string assemblyPath = @"C:\works\...\StaticMembers.dll"
string classFullname = "StaticMembers.MySingleton";
string doSomethingMethodName = "DoSomething";
string doSomethingElseMethodName = "DoSomethingElse";
asm = Assembly.LoadFrom(assemblyPath);
if (asm == null)
throw new FileNotFoundException();
Type[] types = asm.GetTypes();
Type theSingletonType = null;
foreach(Type ty in types)
{
if (ty.FullName.Equals(classFullname))
{
theSingletonType = ty;
break;
}
}
if (theSingletonType == null)
{
Console.WriteLine("Type was not found!");
return;
}
MethodInfo doSomethingMethodInfo =
theSingletonType.GetMethod(doSomethingMethodName );
FieldInfo field = theSingletonType.GetField("instance",
BindingFlags.Static | BindingFlags.Public);
object instance = field.GetValue(null);
string msg = (string)doSomethingMethodInfo.Invoke(instance, Type.EmptyTypes);
Console.WriteLine(msg);
MethodInfo somethingElse = theSingletonType.GetMethod(
doSomethingElseMethodName );
msg = (string)doSomethingElse.Invoke(instance, Type.EmptyTypes);
Console.WriteLine(msg);}