从 Asp.Net 个站点向 EventHub 发送数据

Sending data to EventHub from Asp.Net site

我有一个我向其发送数据的 Azure EventHub。如果我在控制台应用程序(框架 4.6.1)中使用以下代码,它运行完美。

        eventHubClient = EventHubClient.CreateFromConnectionString(myConnString);

        Console.WriteLine("Client Created");

        var sender = eventHubClient.CreatePartitionSender("1");

        var message = $"Message";

        Console.WriteLine($"Sending message: {message}");
        var eventData = new EventData(Encoding.UTF8.GetBytes(message));

        if (!sender.SendAsync(eventData).Wait(TimeSpan.FromMilliseconds(10000)) )
        {
           int a = 0;
        }

但是,如果我将它放在 Asp.Net 应用程序(目标框架 4.6.1)中 运行 in IIS-ExpressIIS,它每次都会超时.

我在这里错过了什么?

似乎当您在 Asp.Net 应用程序的非异步上下文中调用 use async 方法时,它会导致某种死锁。

在我的例子中,我需要知道它是否已经超时,所以我不能将它异步地留给 运行,并且在 async 调用之后我需要完成一些工作完成和失败一样。

这就是我所做的

Task.Run(() =>
{
    if (!sender.SendAsync(eventData).Wait(TimeSpan.FromMilliseconds(10000)) )
        {
           int a = 0;
        }
});

这使我能够处理超时和成功。不幸的是,这不是使整个调用堆栈成为 async 的选项,因此使用 await 是不可能的。

TL;DR:在 ASP.NET 应用程序中调用 .Wait() 可能会导致死锁。