我想從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): *執行每個提供的動作,可能並行。* –