GetAsync(Live SDK)在没有internet连接时退出其调用方法



Live SDK中的一些API出现问题(我使用的是5.6版本)。

这是一个例子来说明我的问题:

private async Task MainMethod()
{
    bool result = await UploadStuffOnOneDrive();
    //Do stuff depending on the result...
}
private static async Task<bool> UploadStuffOnOneDrive()
{
    //Get the OneDrive client...
    String folderID = await GetFolderID(client, "TestFolder", "me/skydrive");
    //Do stuff inside the retrieved folder...
}
private static async Task<String> GetFolderID(LiveConnectClient client, String folderName, String directory)
{
    LiveOperationResult opResult;
    opResult = await client.GetAsync(directory + "/files?filter=folders,albums");
    //Return something from opResult...
}

现在,如果我有一个可用的网络连接,一切都会正常运行:UploadStuff方法从GetFolderID中获取文件夹ID,然后在该目录中上传一个文件并返回。

当我没有网络连接时,就会出现问题:我试着将手机置于aero模式并调用MainMethod。当调用GetFolderID时,我想如果没有可用的连接,我会抛出一个异常,或者它只是返回null。

相反,我的所有方法都从我的StackTrace中消失了:GetFolderID退出,所有其他方法也都退出了。我是不是错过了什么?

一个方法怎么可能在没有异常或类似情况的情况下退出其调用方法?如何检查对GetAsync的调用是否成功?

谢谢你的帮助!

Sergio

好的,所以我弄清楚了,看起来等待调用永远不会返回,所以GetAsync方法不会抛出异常,而是将TaskScheduler的调用进程挂起,这就是为什么调试器以空闲状态返回,我看到StackTrace变为空。

我通过向该方法传递CancellationTokenSource并等待它来解决问题:

LiveOperationResult opResult;
try
{
    var awaitableTask = client.GetAsync(directory + "/files?filter=folders,albums");
    var watchedTask = awaitableTask.ContinueWith(task => task.GetAwaiter().GetResult(), cts.Token);
    opResult = await watchedTask;
catch
{
     throw new OperationCanceledException("Operation canceled by the user");
}

最新更新