Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有EventHub和Async的请求突发模式_C#_Async Await_Iot_Azure Eventhub - Fatal编程技术网

C# 具有EventHub和Async的请求突发模式

C# 具有EventHub和Async的请求突发模式,c#,async-await,iot,azure-eventhub,C#,Async Await,Iot,Azure Eventhub,我正在尝试将音频文件(wav)从IoT设备发送到Eventhub。由于Eventhub对每条消息的大小限制为64Kb,因此每条消息被分块成一个7kb字节数组并发送到Eventhub。我正试图从客户端获得最大发送速率[不超过阈值] 录制现场音频,将其保存在文件流中,并将其分块发送。我使用自定义流实现避免了这一部分 public class CustomAudioStream : IRandomAccessStream{ public IAsyncOperationWithProgress&

我正在尝试将音频文件(
wav
)从
IoT
设备发送到
Eventhub
。由于
Eventhub
对每条消息的大小限制为64Kb,因此每条消息被分块成一个
7kb
字节数组并发送到
Eventhub
。我正试图从客户端获得最大发送速率[不超过阈值]

录制现场音频,将其保存在文件流中,并将其分块发送。我使用自定义流实现避免了这一部分

public class CustomAudioStream : IRandomAccessStream{
    public IAsyncOperationWithProgress<uint, uint> WriteAsync(IBuffer buffer)
        {
            return AsyncInfo.Run<uint, uint>((token, progress) =>
             {
                 return Task.Run(() =>
                 {
                     using (var memoryStream = new MemoryStream())
                     {
                         using (var outputStream = memoryStream.AsOutputStream())
                         {
                             outputStream.WriteAsync(buffer).AsTask().Wait();

                             var byteArray = memoryStream.ToArray();

                             //bytes are ready to send from here 
                             ChunkedEventSender(this, byteArray);
#if DEBUG
                             Debug.WriteLine("Array Length:  " + byteArray.Length + "    MemoryStream length:" + memoryStream.Length);
#endif 
                             return (uint)memoryStream.Length;
                         }
                     }
                 });
             });
        }
   }
我不想等待任务完成,也不想等待任务的结果。但当我这样做时,我的大多数请求都会被“
请求超时”
,应用程序会因为这些请求而被卡住

不管怎样,我都可以在不阻塞线程的情况下使应用程序响应


编辑:当前应用的
并行。调用
并不会丢失一条消息,应用程序也会响应,但发送速度会急剧下降到每秒2-3条消息


我应该切换到多线程模型而不是使用异步。发现类似这样的问题

您正被azure eventhub限制。计算总进出量并选择所需的吞吐量

每个吞吐量单元具有以下功能:1 MB/s入口、2 MB/s出口和高达84 GB的事件存储。转到service bus命名空间中的scale选项卡,并根据需要增加吞吐量单位。 我想,“请求超时”并不一定意味着你被限制了。我将查找detail属性并检查错误代码。如果将50002视为错误代码,则意味着您已被限制,并且可能会根据需要增加TU。仅供参考,单个TU每秒最多支持1000个事件


希望这有帮助

Parallel.Invoke
是多线程的吗??不,不是这样的,请阅读:执行每个提供的操作,可能是并行的。哈哈,可能是。。。。实际上,我正在尝试在eventhub上发送麦克风数据。当麦克风被激活时,我并不是在等待它写入文件,而是一个自定义实现的writeasync,并在收到它们后立即发送字节。只是我试图避免写入一次又一次地转换为字节。是的,活动中心也有64K大小的限制
 Task.Factory.StartNew(()=>{ 
          BackgroundSender(byte[data]);
        });