我有以下代码片段来处理Azure Notification Hub推送通知:
var alert = "{\"aps\":{\"alert\":\"" + message + "\"}}";
var task = AzurePushNotifications.Instance.Hub.SendAppleNativeNotificationAsync(alert, username);
if (await Task.WhenAny(task, Task.Delay(500)) == task)
{
success = true;
}
偶尔,这会失败 - 我试图找出原因?
使用Task.WhenAny
运行时获取某些诊断信息的最佳方式是什么?
我想知道是否抛出了异常,或者是否超时了。
答案 0 :(得分:1)
你基本上有三种可能性:
Task.WhenAny(task, Task.Delay(500)) == task
是假的。这意味着任务超时Task.WhenAny(task, Task.Delay(500)) == task
是真的。然后:
t1.Status == TaskStatus.RanToCompletion
,则任务成功运行task.IsFaulted
和task.Exception
以查找更多信息如果需要> 500毫秒,我希望它失败,但我想知道它失败的原因
在这种情况下,您唯一可以知道的是通知超时。记录没有例外,因为任务尚未完成。如果要在最终完成时检查状态,可以链接延续:
task.ContinueWith(t =>
{
// Log t.Exception
}, TaskContinuationOptions.OnlyOnFaulted);
答案 1 :(得分:1)
我想知道是否抛出了异常,或者是否超时了。
您只需要观察完成的任务,如下:
var task = ...;
if (await Task.WhenAny(task, Task.Delay(500)) == task)
{
await task;
success = true;
}
这将传播异常,允许您区分任务失败(将抛出异常),任务成功(success == true
)和任务超时(success == false
)。 / p>