WP8 中是否支持异步/等待模式?
我需要从基于 Web 的 API 获取 XML,它看起来像这样WebClient
或WebRequest
不支持它。
WP8 BCL 中是否有支持 async/await 的类可用于 Web 访问?如果没有,是否有我可以使用的库?
我知道创建包装器来支持它并不难,但这似乎是 SDK 中包含的东西。
WP8 中是否支持异步/等待模式?
我需要从基于 Web 的 API 获取 XML,它看起来像这样WebClient
或WebRequest
不支持它。
WP8 BCL 中是否有支持 async/await 的类可用于 Web 访问?如果没有,是否有我可以使用的库?
我知道创建包装器来支持它并不难,但这似乎是 SDK 中包含的东西。
WP8 BCL 中是否有支持 async/await 的类可用于 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;
}
}
作为本博文中描述的NuGet 包Microsoft.Threading.Tasks.Extensions.Phone.dll
的一部分,提供了一些对 WP8 的支持。Microsoft.Bcl.Async
特别是,它包括WebClient.DownloadStringTaskAsync
.
我有同样的问题,我发现了这个并帮助了我
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/
WP8 中是否支持异步/等待模式?
澄清一下,Windows Phone 8 上完全支持 C# 5.0。WinRT API 很大程度上依赖于 async/await,例如同步到 PeopleHub,或使用 I/O API。
但是 Silverlight 和旧的 .NET API 尚未更新为对 WebClient 等类使用 async/await。
WP8 具有原生 async/await 支持,但有一些限制,例如缺少 HttpClient 和可能的其他类。
WP7 在 VS2010 中使用 AsyncCTP 支持 async/await,但在 VS2012 中它最近被重新添加为 Microsoft.Bcl.Async:
https ://nuget.org/packages/Microsoft.Bcl.Async/1.0.12-beta