W pracy utknąłem w wersji 3.5, ale korzystamy z asyncbridge dla async-await. Używamy wielu starych asynchronicznych wywołań WCF i chcę zawinąć to w nowy wzór async-await.WCF 3.5, AsyncBridge. Owiń w oczekujące
mam zawijania to w następujący sposób:
// async is wrong
public /*async*/ Task<ScannedDocumentResult> GetScannedDocumentsTask(String assignmentId)
{
TaskCompletionSource<ScannedDocumentResult> tcs = new TaskCompletionSource<ScannedDocumentResult>();
EventHandler<GetScannedDocumentsCompletedEventArgs> handler = null;
handler = (o, e) =>
{
if (e.UserState != tcs)
return;
if (e.Error != null)
tcs.SetException(e.Error);
else if (e.Cancelled)
tcs.SetCanceled();
else
tcs.SetResult(e.Result);
GetScannedDocumentsCompleted -= handler;
};
GetScannedDocumentsCompleted += handler;
GetScannedDocumentsAsync(assignmentId, tcs);
return tcs.Task;
}
są następujące wygenerowano w proxy 3,5 WCF:
GetScannedDocumentsAsync GetScannedDocumentsCompleted GetScannedDocumentsEventArgs
Coś mi mówi, że można to zrobić dużo czystszego, czy brakowało mi czegoś poważnego?
Czy ta metoda w ogóle wykona asynchroniczne? Kompilacja z operatorem asynchronicznym generuje tylko błąd.
Czy 'GetScannedDocumentsAsync' zwraca' IAsyncResult'? Jeśli tak, [this] (http://blogs.msdn.com/b/pfxteam/archive/2011/06/27/10179452.aspx) doskonały blog opisuje, jak zrobić to dobrze. – Noseratio
'asynchroniczny' jest dozwolony tylko dla metod, które mają w sobie' await'. Jaka jest definicja "GetScannedDocumentsAsync"? –
Jeśli uważasz, że 'asynchroniczne' jest wymagane, aby metoda faktycznie wykonywała się asynchronicznie, to faktycznie nie wiesz, co oznacza' asynchronizm'. Prawdopodobnie powinieneś przeczytać więcej na ten temat. – svick