Azure 通知中心 .net api 无法异步工作
Posted
技术标签:
【中文标题】Azure 通知中心 .net api 无法异步工作【英文标题】:Azure Notifications hub .net api not working async 【发布时间】:2014-11-21 14:23:32 【问题描述】:我已按照this 教程为 ios 应用程序创建推送通知中心。
当我运行代码时
private static async void SendNotificationAsync()
NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString(host, "sideview", false);
var alert = "\"aps\":\"alert\":\"Hello\"";
await hub.SendAppleNativeNotificationAsync(alert);
从控制台程序的 static void Main(string[] args) 中,没有任何反应,控制台只是停止。
如果我使用
private static void SendNotificationAsync()
NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString(host, "sideview", false);
var alert = "\"aps\":\"alert\":\"Hello\"";
hub.SendAppleNativeNotificationAsync(alert).Wait();
一切正常
更新
正如Yuval Itzchakov在下面的回答中所说,Console Application的main方法不能被标记为async,所以不会等待async方法
【问题讨论】:
你需要展示你是如何调用这些方法的——在你的问题中包含代码。 我要赌一把,你是从一个不能等待这个方法的方法调用它,因为它是一个异步无效,所以没有办法等待方法完成。 【参考方案1】:不能将控制台应用程序的 main 方法标记为 async
。因此,您需要在异步操作上显式使用Task.Wait
或Task.Result
以确保控制台的主方法不会终止,从而关闭整个进程。
我假设电话是这样的:
public static void Main(string[] args)
// Do some stuff
SendNotificationAsync();
你需要做两件事:
将SendNotificationAsync
更改为async Task
而不是async void
,这样您就可以在返回的任务上使用Wait
。注意async void
仅用于异步事件处理程序的兼容性:
private static async Task SendNotificationAsync()
NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString(host, "sideview", false);
var alert = "\"aps\":\"alert\":\"Hello\"";
await hub.SendAppleNativeNotificationAsync(alert);
在调用堆栈的顶部使用Task.Wait
:
public static void Main(string[] args)
// Do some stuff
SendNotificationAsync().Wait();
这适用于控制台应用程序。对于具有除默认 ThreadPoolSynchronizationContext
以外的自定义 SynchronizationContext
的任何应用程序,不建议使用此方法。在这些类型的应用程序中始终使用await
。
【讨论】:
因此,如果我在 web api“生态系统”中使用异步方法,我应该对私有静态异步任务 SendNotificationAsync() NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString(host, "sideview" , 错误的); var alert = "\"aps\":\"alert\":\"Hello\"";等待 hub.SendAppleNativeNotificationAsync(alert); ? 你为什么认为你有任何问题? 我想说我不应该有问题 你应该没问题。以上是关于Azure 通知中心 .net api 无法异步工作的主要内容,如果未能解决你的问题,请参考以下文章
Azure 通知中心:SendTemplateNotificationAsync 是不是适用于 .net Core