Au travail, je suis actuellement coincé dans 3.5, mais nous utilisons asyncbridge pour async-await. Nous utilisons beaucoup d'anciens appels asynchrones WCF, et je veux envelopper dans le nouveau modèle async-waiting.WCF 3.5, AsyncBridge. Wrap in async-await
J'enroulant cela comme suit:
// 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;
}
Les suivants sont genereted dans le proxy 3.5 WCF:
GetScannedDocumentsAsync GetScannedDocumentsCompleted GetScannedDocumentsEventArgs
Quelque chose me dit que cela peut être fait beaucoup plus propre, ai-je manqué quelque chose de cru?
De même, cette méthode va-t-elle exécuter async? La compilation avec l'opérateur async génère simplement une erreur.
Est-ce que 'GetScannedDocumentsAsync' renverra' IAsyncResult'? Si c'est le cas, [cet article (http://blogs.msdn.com/b/pfxteam/archive/2011/06/27/10179452.aspx) excellent blog explique comment le faire correctement. – Noseratio
'async' n'est autorisé que sur les méthodes qui ont' await' à l'intérieur. Quelle est la définition de 'GetScannedDocumentsAsync'? –
Si vous pensez que 'async' est requis pour qu'une méthode s'exécute réellement de façon asynchrone, alors vous ne comprenez pas vraiment ce que' async' veut dire. Vous devriez probablement en lire plus à ce sujet. – svick