我正在为边缘开发一个扩展名,我需要从UWP发送超过1MB的数据。
我将数据分解为小于1MB,并尝试多次发送回复
private async void OnAppServiceRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args) {
AppServiceDeferral messageDeferral = args.GetDeferral();
// This is to be replaced with enumerator
for (int i = 0; i < number_of_chunks; i++) {
// construct reply identifying the chunk number and termination
await args.Request.SendResponseAsync(reply);
}
messageDeferral.Complete();
}
在上述循环中发送第二个响应时,应用程序服务将被取消。似乎只有在有相应的请求时才可以发送响应。有人可以确认吗?
UWP中是否有任何替代机制在没有请求的情况下不同步发送数据?
我能想到的另一个选择是将块的逻辑移至背景,感觉不正确。
fwiw,Chrome&amp;Firefox没有这样的限制,我能够将消息异步发送到STDOUT。
更新#1:彼得,恐怕我会遇到相同的错误"第二个发送的方法在意外的时间被调用"。我尝试了以下内容,希望这就是您的意思。
private async void OnAppServiceRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args) {
// This is to be replaced with enumerator
for (int i = 0; i < number_of_chunks; i++) {
// construct reply identifying the chunk number and termination
AppServiceDeferral messageDeferral = args.GetDeferral();
await args.Request.SendResponseAsync(reply);
messageDeferral.Complete();
}
}
您需要调用args.GetDeferral()
,以免在第一次悬架呼叫(await
)下拆除连接。然后,您需要在完成工作后在延期上致电Complete()
。