Azure 通知中心发送数千条通知并从每个通知中取回结果

Azure Notification Hub Sending thousands of notifications and getting back results from each

我们正在为我们的应用设置推送通知。我们现在正在创建一个控制台应用程序,它将确定要发送给哪些用户,然后将它们发送给所述用户。在这一点上对我们来说不明显的是,我们如何知道它们中的每一个何时完成?还是没有完成? Microsoft 提供的文档不多(令人大吃一惊),而且无论有什么文档都没有真正解释如何阅读回复。

例如,这是我们认为需要实施的示例片段,因为我们可以同时让数千人收到通知,我们希望他们运行 并行而不是阻止UI。

public async Task GenerateNotifications()
{
NotificationHubClient hub =           NotificationHubClient.CreateClientFromConnectionString(AppHelper.AzureNotificationHubConnectionString, "myhub");

List<Task<NotificationOutcome>> notificaitonTasks = new List<Task<NotificationOutcome>>();

for (int i = 0; i < 10; i++)
{
    var notification = new
    {
        aps = new
        {
            alert = string.Format("Awesome Notification {0}", i),
            sound = "default"
        }
    };

    string notificationJSON = JsonConvert.SerializeObject(notification);
    notificaitonTasks.Add(hub.SendAppleNativeNotificationAsync(notificationJSON, "mytag"));
}

await Task.WhenAll(notificaitonTasks);

}

这对我们来说很有意义,我们使用 WhenAll 方法在并行线程上执行所有任务。但是有没有办法知道每个获得 运行 的任务会发生什么?例如,ContinueWith 方法似乎可以满足我们的要求,除了我们 认为 这只会 运行 在所有任务完成之后,而不是在每个任务完成之后一个(如有错误请指正)

那么,有没有办法读取 WhenAll 调用的每个响应?如果不是,是否有更好的方法来做我们正在尝试做的事情?我会提供任何其他需要的信息,请问。

您可以使用每条消息遥测功能来获取发送的每条通知的结果。但是,您需要升级到标准层级才能做到这一点。参见 link Per Message Telemetry Per Message Telemetry Blog

附带说明,您可以通过使用 EnableTestSend 属性 来使用 NotificationOutcome.Result 属性,如 link EnableTestSend property(搜索调试失败通知)。这只会将通知发送到符合您条件的 10 台设备。这主要用于调试目的