Я бы хотел легко создавать асинхронные методы для моей службы WCF.Я знаю, что для этого нужно использовать асинхронный шаблон Begin / End и пометить мой метод Begin с помощью AsyncPattern = true.Мне интересно, действительно ли мне нужно сделать свой собственный объект AsyncResult для обработки (что я немного нервничаю из-за этого) или могу ли я использовать обработчик событий и по существу обернуть мой Begin / End вокруг вызова Begin / End обработчика событий,Это выглядит как обходной способ сделать это, но, поскольку (насколько я знаю) я не могу подписаться или вызвать событие напрямую из WCF, это выглядит как правдоподобное решение.
private event EventHandler<RequestEventArgs> OnSendRequest;
[OperationContract(AsyncPattern = true)] // Borrowed from the interface for this example
public IAsyncResult BeginSendRequest(Request request, AsyncCallback callback, object state)
{
EventHandler<RequestEventArgs> handler = OnSendRequest;
if (handler != null)
return handler.BeginInvoke(this, new RequestEventArgs(request), callback, handler);
return null;
}
public void EndSendRequest(IAsyncResult result)
{
EventHandler<RequestEventArgs> handler = (EventHandler<RequestEventArgs>)result.AsyncState;
handler.EndInvoke(result);
}
ТогдаОчевидно, что-то подписывается на событие, чтобы сделать работу.Я также отбрасываю состояние объекта, переданное моему методу Begin, в пользу передачи обработчика события в качестве состояния, поэтому у меня есть доступ к нему для вызова EndInvoke.
Является ли эта опция приемлемой?(У меня ограниченные знания и понимание того, как вообще работают объект AsyncResult и асинхронное программирование.)