我正在尝试在我的应用程序中实现此代码以将数据备份到 skydrive http://netitude.bc3tech.net/2012/07/11/skydrive-backup-of-your-mobile-applets-get-some-common-ground/
但是我怎么无法安装 Async CTP(我在 2 - 3 天内进行了测试,但 async ctp 没有正常安装...我已经尝试过解决方案,但问题仍然存在)。可以做同样的事情但不使用异步吗?如何等待完成任务继续?
使用这些工具“Windows Phone SDK 7.1 和 7.1.1 更新”:https://dev.windowsphone.com/en-us/downloadsdk
(...)
var rootFolders = JObject.Parse((await client.GetAsyncTask("/me/skydrive/files?filter=folders,albums")).RawResult);
var progDataFolder = rootFolders["data"].FirstOrDefault(f => f.Value<string>("name").Equals("programdata", StringComparison.OrdinalIgnoreCase));
string progDataFolderId;
if (progDataFolder == null)
{
var result = await client.PostAsyncTask("me/skydrive/",
new Dictionary<string, object>() { { "name", "ProgramData" } });**
progDataFolderId = JObject.Parse(result.RawResult).Value<string>("folder_id");
}
else
{
progDataFolderId = progDataFolder.Value<string>("id");
}
var windowsPhoneFolder = JObject.Parse((await client.GetAsyncTask(string.Concat("/", progDataFolderId, "/files?filter=folders,albums"))).RawResult)["data"]
.FirstOrDefault(f => f.Value<string>("name").Equals("windows phone", StringComparison.OrdinalIgnoreCase));
string windowsPhoneFolderId;
if (windowsPhoneFolder == null)
{
var result = await client.PostAsyncTask(string.Concat("/", progDataFolderId),
new Dictionary<string, object>() { { "name", "Windows Phone" } });**
windowsPhoneFolderId = JObject.Parse(result.RawResult).Value<string>("id");
}
else
{
windowsPhoneFolderId = windowsPhoneFolder.Value<string>("id");
}
(...)
替代方法。示例:
var result = await client.PostAsyncTask("me/skydrive/",
new Dictionary<string, object>() { { "name", "ProgramData" } });
最佳答案
如果您有Task
,您可以使用所谓的“延续传递方式”。本质上,在您使用 await
的任何地方,您都可以调用 Task.ContinueWith
并传入您的方法的其余部分。循环更复杂,但也可以用延续来处理。
请注意,如果您没有正确安装 Async CTP,GetAsyncTask
可能无法正常工作。所以在你的情况下,我建议你使用 Event-based Asynchronous Pattern (EAP) LiveConnectClient
类已经支持:例如,订阅 GetCompleted
事件,然后调用 GetAsync
。参见 this post举个例子。
关于c# - 异步替代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12316403/