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

时间:2017-03-14 12:27:22

标签: c# asp.net azure azure-eventhub

我有一个我发送数据的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)中,或者在IIS-ExpressIIS中运行,则每次都会超时。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

当您调用在Asp.Net应用程序中的非异步上下文中使用async方法时,它会导致一些死锁的排序。

在我的情况下,我需要知道它是否已超时,所以我不能让它以异步方式运行,并且在async调用完成后我需要完成的工作以及它是否已完成失败。

这就是我做的事情

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

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

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