GetAsync(Live SDK)在没有互联网连接时使其调用方法退出
GetAsync (Live SDK) makes its calling method exit when there is no internet connection
我在使用 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,然后上传该目录中的文件并 returns。
当我 没有 网络连接时会出现问题:我尝试将 phone 置于航空模式并调用 MainMethod。
当调用 GetFolderID 时,我想如果没有可用的连接我会抛出异常,或者它只是返回 null。
相反,我的所有方法都从我的 StackTrace 中 消失了 :GetFolderID 退出了,所有其他方法也一样。
我错过了什么吗?
一个方法怎么可能在没有异常或类似情况的情况下退出它的调用方法?
如何检查我对 GetAsync 的调用是否成功?
感谢您的帮助!
塞尔吉奥
好的,所以我想通了,看起来 await 调用从来没有 returns,所以 GetAsync 方法不会抛出异常,而是暂停 TaskScheduler 的调用进程,这就是为什么调试器 returns 处于空闲状态并且我看到 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");
}
我在使用 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,然后上传该目录中的文件并 returns。
当我 没有 网络连接时会出现问题:我尝试将 phone 置于航空模式并调用 MainMethod。 当调用 GetFolderID 时,我想如果没有可用的连接我会抛出异常,或者它只是返回 null。
相反,我的所有方法都从我的 StackTrace 中 消失了 :GetFolderID 退出了,所有其他方法也一样。 我错过了什么吗?
一个方法怎么可能在没有异常或类似情况的情况下退出它的调用方法? 如何检查我对 GetAsync 的调用是否成功?
感谢您的帮助!
塞尔吉奥
好的,所以我想通了,看起来 await 调用从来没有 returns,所以 GetAsync 方法不会抛出异常,而是暂停 TaskScheduler 的调用进程,这就是为什么调试器 returns 处于空闲状态并且我看到 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");
}