支持WP8中的異步/等待模式?Windows Phone網絡訪問API中的異步等待
我需要從基於Web的API獲取XML,看起來WebClient
或WebRequest
不支持它。
在WP8 BCL中是否有支持異步/等待可用於Web訪問的類?如果沒有,是否有我可以使用的圖書館?
我知道創建包裝來支持它並不難,但這看起來像是一個包含在SDK中的東西。
支持WP8中的異步/等待模式?Windows Phone網絡訪問API中的異步等待
我需要從基於Web的API獲取XML,看起來WebClient
或WebRequest
不支持它。
在WP8 BCL中是否有支持異步/等待可用於Web訪問的類?如果沒有,是否有我可以使用的圖書館?
我知道創建包裝來支持它並不難,但這看起來像是一個包含在SDK中的東西。
在WP8 BCL中,是否有支持異步/等待可用於Web訪問的類?
這是在WP8 SDK內測期間引起的一個問題,所以我可以回答這個問題,不幸的是,沒有。
但正如你所提到的,製作自己的包裝是相當容易的。
例如:
public static class Extensions
{
public static Task<string> DownloadStringTask(this WebClient webClient, Uri uri)
{
var tcs = new TaskCompletionSource<string>();
webClient.DownloadStringCompleted += (s, e) =>
{
if (e.Error != null)
{
tcs.SetException(e.Error);
}
else
{
tcs.SetResult(e.Result);
}
};
webClient.DownloadStringAsync(uri);
return tcs.Task;
}
}
是否有在WP8異步/ AWAIT模式支持?
只是爲了澄清,沒有在Windows Phone 8完整的C#5.0的支持WinRT的API的主要依賴於異步/ AWAIT,如同步到PeopleHub,或使用I/O的API。
但是Silverlight和舊的.NET API沒有被更新爲像WebClient這樣的類使用async/await。
我知道有語言支持,但KooKiz斷言,沒有API支持。 –
如果您閱讀了我的*整個*文章,您會看到*有* API支持,用於* some * API。 –
作爲Microsoft.Bcl.Async
NuGet package描述的in this blog post的一部分提供的Microsoft.Threading.Tasks.Extensions.Phone.dll
中對WP8有一些支持。
特別是,它包括WebClient.DownloadStringTaskAsync
。
WP8具有本地異步/等待支持與一些限制,如缺少HttpClient和其他可能的類。
WP7已經爲異步支持使用AsyncCTP在VS2010 /等待,但在VS2012這是最近重新加入Microsoft.Bcl.Async:
https://nuget.org/packages/Microsoft.Bcl.Async/1.0.12-beta
我有同樣的問題,我發現這一點,並幫我
private async Task<T> ExecuteAsync<T>(RestRequest request)
{
var tcs = new TaskCompletionSource<T>();
_client.ExecuteAsync(request, resp =>
{
var value = JsonConvert.DeserializeObject<T>(resp.Content);
if (value.ErrorCode > 0)
{
var ex = new ToodledoException(value.ErrorCode, value.ErrorDesc);
tcs.SetException(ex);
}
else
tcs.SetResult(value);
});
return await tcs.Task;
}
http://www.developer.nokia.com/Community/Wiki/Asynchronous_Programming_For_Windows_Phone_8 還我發現這個擴展有用http://nuget.org/packages/WP8AsyncWebClient/
爲什麼你會把異步操作在自己的線程?我不知道爲什麼,但這看起來很可怕! –
只需刪除Task.Factory.StartNew ... –
@ToniPetrina你是對的,謝謝。固定。 –