2013-02-01 12 views
5

Se ho un metodo asincrono con callbackCome rendere un metodo asincrono "vecchio stile" awaitable

MyMethodAsync(<Input Parameters ...>, Callback); 

come posso farlo awaitable?

[questo metodo è per Windows Phone 7, ma dovrebbe essere ugualmente applicabile a qualsiasi simile C# costrutto]

DNSEndpoint Endpoint = ... 
NameResolutionCallback Callback = (nrr) => { ... } 
DeviceNetworkInformation.ResolveHostNameAsync(Enpoint, Callback, null); 

Voglio mettere un wrapper awaitable intorno a questa chiamata, in modo da attendere per la richiamata per completare prima di continuare con il prossimo comando.

+2

In una libreria di classi .NET o Portable 4.5 è possibile utilizzare TaskFactory.FromAsync (http://msdn.microsoft.com/en-us/library/dd321469. aspx) - Non conosco un equivalente semplice per WP7. Potrebbe esserci una libreria di supporto che ha qualcosa di equivalente. –

+2

Ho pensato che FromAsync fosse solo per i metodi definiti come BeginXXX, coppie EndXXX? – Peregrine

+0

Esistono vari overload FromAsync. Potrei non aver collegato a quello più appropriato. –

risposta

7

È possibile utilizzare un TaskCompletionSource:

var tcs = new TaskCompletionSource<TypeOfCallbackParameter>(); 

MyMethodAsync(..., r => tcs.SetResult(r)); 

return tcs.Task; 
+0

+1. 'TaskCompletionSource ' è [il modo corretto per farlo] (http://msdn.microsoft.com/en-us/library/hh873178.aspx). –

Problemi correlati