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

时间:2016-11-21 22:27:07

标签: multithreading azure azure-notificationhub

我们正在为我们的应用设置推送通知。我们现在正在创建一个控制台应用程序,用于确定要发送给哪些用户,然后将其发送给所述用户。在这一点上我们不明白的是我们如何知道他们每个人何时完成?还是没有完成?微软提供的文档并不多(这里有很大的惊喜),而且没有任何文档也没有真正解释如何阅读回复。

例如,这里是我们认为需要实现的示例片段,因为我们可能有数千人同时收到通知,我们希望它们并行运行而不是阻止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方法来执行parralel线程上的所有任务。但是有没有办法知道运行的每个任务会发生什么?例如,ContinueWith方法似乎做了我们想要的,除了我们认为这只会在所有任务完成后运行,而不是在每个任务完成后(如果我和#39;我错了。)

那么,有没有办法阅读WhenAll来电的每个回复?如果不是,有没有更好的方法来做我们想做的事情?我将提供所需的任何其他信息,请问。

1 个答案:

答案 0 :(得分:0)

您可以使用每条消息遥测功能获取发送的每条通知的结果。但是,您需要升级到标准层才能执行此操作。见链接 Per Message Telemetry Per Message Telemetry Blog

在旁注中,您可以使用EnableTestSend属性来使用NotificationOutcome.Result属性,如链接EnableTestSend property(搜索调试失败通知)中所示。这只会将通知发送到符合您条件的10台设备。这主要用于调试目的