Ожидание завершения одностороннего вызова WCF в консольном приложении C#

У меня есть веб-служба WCF (не находящаяся под моим контролем), которая реализует функциональность, к которой мне нужно получить доступ через IsOneWay = true + интерфейс обратного вызова, один из методов которого уведомляет о завершении обработки. Он был написан так, как он изначально был разработан для доступа из графического интерфейса.

Однако мне нужно получить доступ к этому же методу из консольного приложения для использования в пакете. В настоящее время мой грубый метод достижения этого состоит в том, чтобы установить флаг в false, и после вызова метода WCF я реализую цикл while с кратким вызовом Thread.Sleep(). Это, очевидно, работает, но кажется плохим способом достижения конечного результата.

Я хотел бы знать, каков правильный способ сделать это. Примечание: служба находится вне моего контроля, и ссылка была только что добавлена ​​через IDE, хотя я легко могу реализовать реализацию кода и т. Д.

1 ответ

Используйте ManualResetEvent для ожидания завершения. Вызовите односторонний асинхронный метод в службе, а затем дождитесь объекта вручную resetevent. В вашем обратном вызове вызовите метод Set(), который позволит вашему основному потоку продолжить выполнение после вызова WaitOne() следующим образом:

var waitHandle = new ManualResetEvent();

yourwcfObject.CallTheOneWayMethod();
waitHandle.WaitOne();


void CallbackMethodRaisedByWCFService()
{
    waitHandle.Set();
}
Другие вопросы по тегам