我想从IoT
设备发送音频文件(wav
)到Eventhub
。由于Eventhub
的每个消息的大小限制为64Kb,因此每个消息都被分块为7kb
字节数组并发送至Eventhub
。我正试图从客户端实现最大发送率[不超过阈值]。突发模式的请求与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;
}
}
});
});
}
}
但我不能够以相同的速度在这里与REST实现发送字节。发送我使用第三方包装,所以我不能在那边。
,但我可以跨越线程使应用程序响应,而互动,所以我使用
Task.Factory.StartNew(()=>{
BackgroundSender(byte[data]);
});
我不想等到任务完成Task.but既不结果当我做到这一点大部分我的请求正在变得“Request Timed out
”,并且Application因为这些请求而陷入困境。
无论如何,我可以让应用程序响应而不会阻塞线程。
编辑:目前应用Parallel.Invoke
而不是松散单信息和应用也响应,但大幅下降发送到2-3消息/秒
我应该切换到多线程模式,而不是使用异步。找到Simlar这样的问题Is async HttpClient from .Net 4.5 a bad choice for intensive load applications?
'Parallel.Invoke'是多线程...... ?? –
没有它那样, – joshua
请阅读[Parallel.Invoke'文档](https://msdn.microsoft.com/en-us/library/system.threading.tasks.parallel.invoke.aspx): *执行每个提供的动作,可能并行。* –