调试 Task.WhenAny 和推送通知
Debugging Task.WhenAny and Push Notifications
我有以下代码片段来处理 Azure 通知中心推送通知:
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
时,获取一些诊断信息的最佳方法是什么?
我想知道是否抛出了异常,或者是否达到了超时。
你基本上有三种可能:
Task.WhenAny(task, Task.Delay(500)) == task
为假。表示任务超时
Task.WhenAny(task, Task.Delay(500)) == task
是真的。然后:
- 如果
t1.Status == TaskStatus.RanToCompletion
,则任务运行成功
- 否则,它要么被取消,要么出错。检查
task.IsFaulted
和 task.Exception
以查找更多信息
If it takes > 500ms, I want it to fail, but I want to know that's why it failed
那样的话,你唯一能知道的就是通知超时了。由于任务尚未完成,因此不会记录异常。如果你想在它最终完成时检查状态,你可以链接一个延续:
task.ContinueWith(t =>
{
// Log t.Exception
}, TaskContinuationOptions.OnlyOnFaulted);
I'd like to know if either an exception was thrown, or if the timeout has been hit.
您只需观察完成的任务即可,如:
var task = ...;
if (await Task.WhenAny(task, Task.Delay(500)) == task)
{
await task;
success = true;
}
这将传播异常,让您区分任务失败(将抛出异常)、任务成功(success == true
)和任务超时(success == false
) .
我有以下代码片段来处理 Azure 通知中心推送通知:
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
时,获取一些诊断信息的最佳方法是什么?
我想知道是否抛出了异常,或者是否达到了超时。
你基本上有三种可能:
Task.WhenAny(task, Task.Delay(500)) == task
为假。表示任务超时Task.WhenAny(task, Task.Delay(500)) == task
是真的。然后:- 如果
t1.Status == TaskStatus.RanToCompletion
,则任务运行成功 - 否则,它要么被取消,要么出错。检查
task.IsFaulted
和task.Exception
以查找更多信息
- 如果
If it takes > 500ms, I want it to fail, but I want to know that's why it failed
那样的话,你唯一能知道的就是通知超时了。由于任务尚未完成,因此不会记录异常。如果你想在它最终完成时检查状态,你可以链接一个延续:
task.ContinueWith(t =>
{
// Log t.Exception
}, TaskContinuationOptions.OnlyOnFaulted);
I'd like to know if either an exception was thrown, or if the timeout has been hit.
您只需观察完成的任务即可,如:
var task = ...;
if (await Task.WhenAny(task, Task.Delay(500)) == task)
{
await task;
success = true;
}
这将传播异常,让您区分任务失败(将抛出异常)、任务成功(success == true
)和任务超时(success == false
) .