c# - 异步替代

标签 c# windows-phone-7 async-ctp onedrive

我正在尝试在我的应用程序中实现此代码以将数据备份到 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/

相关文章:

windows-phone-7 - Windows Phone 7 开发者许可证的价格?

windows-phone-7 - 获取WP7地名列表

c# - 异步 CTP 可以与可移植库一起使用吗

c# - 有没有办法使用 Task<T> 作为 future 值 T 的等待句柄?

c# - 我如何在 C# 中制作一个计算小时、分钟和秒的倒数计时器?

c# - .Net 核心 2.2 未将 302 的状态代码更新为 401。OnRedirectToLogin 事件未触发

c# - WCF 图像序列化

c# - 选择文本框中用双引号写的文本.. windows 窗体应用程序

silverlight - Windows Phone 中的 System.Windows.Browser