2013-02-01 19 views
5

如果我有一個回調如何使「舊式」異步方法awaitable

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

我怎樣才能使它awaitable異步方法?

[此方法對於Windows Phone 7的,但應同樣適用於任何類似的C#構造]

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

我想提出一個awaitable包裝解決這個電話,讓我等待回調完成然後繼續下一個命令。

+2

在便攜式類庫或.NET 4.5,你可以使用TaskFactory.FromAsync(http://msdn.microsoft.com/en-us/library/dd321469。 aspx) - 我不知道WP7的簡單等價物。可能有一個支持庫有相同的東西。 –

+2

我以爲FromAsync僅適用於定義爲BeginXXX,EndXXX對的方法? – Peregrine

+0

有各種FromAsync重載。我可能沒有鏈接到最合適的一個。 –

回答

7

你可以使用一個TaskCompletionSource

var tcs = new TaskCompletionSource<TypeOfCallbackParameter>(); 

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

return tcs.Task; 
+0

+1。 'TaskCompletionSource '是[正確的方法](http://msdn.microsoft.com/en-us/library/hh873178.aspx)。 –