(я использую .Net 4.0)
Я хочу вызвать службу WCF асинхронно, с моего уровня обслуживания. Этот сервисный уровень используется контроллером MVC.Net. Я прочитал, что хорошая практика для вызова службы WCF асинхронно. Поэтому я использую begin/end (apm). Я хочу удвоить проверку, если я делаю это richt:
public byte[] GetSomeData()
{
IAsyncResult result = myServiceClient.BeginDoSomething(someInputValue, null, null);
var data = _pdfCreatieService.EndCreateForPreview(result);
return data;
}
Я не совсем уверен в коде выше, потому что я видел такие конструкции, как код ниже, который выглядит немного сложнее и ненужным в моем случае:
public byte[] GetSomeData()
{
var myState = new MyState();
IAsyncResult result = _myServiceClient.BeginDoSomething(someInputValue, CreateForPreviewCallback, myState);
result.AsyncWaitHandle.WaitOne();
return myState.Bytes;
}
private void DoSomethingCallback(IAsyncResult result)
{
var myState = (MyState)result.AsyncState;
myState.Bytes = _myServiceClient.EndDoSomething(result);
}
Спасибо Авнер Шахар-Каштан, Нед Стоянов и Носератио. Ваши ответы действительно проницательны!