如果连接意外断开,则无法处理套接字流上的应用程序崩溃



我有一个小工具,可以轻松地将文件从手机(Windows 10)传输到PC。 只是一个文件,快速,无需电线,无需搜索文件夹。 只需"共享">,所有其他客户端将显示文件以供下载。首先使用互联网服务器作为"缓存"。现在我把这个想法扩展到WLAN/LAN。我选择在没有HTTP或FTP的情况下构建自己的解决方案。只是通过TCP/IP的字节。第一个测试解决方案效果很好。我玩了很多缓冲区,大小,连续流。我还在垃圾收集器中找到了一个不错的小方法 - 现在我的旧,缓慢的Lumia 640可以在不耗尽内存的情况下传输最大的文件(在150到out_of_memory之前使用最大33MB,完美的缓冲区大小使这款手机达到我的WLAN最大传输速率。 不敢相信,

但有一件事我无法处理..

如果连接意外断开,应用程序接收部分中的此线路将强制 立即出现任务等待者异常,看起来比我处理它的速度要快得多。我尝试了使用sync变体,async,Task.Run(),TaskFactory.RunAsync。我从未见过 UWP 应用程序崩溃得如此之快 "inStream"基于意外的套接字连接和Excep。扔在 .CopyToAsync().

如何处理任务等待者异常本身还是有其他方法?

private async void SocketListener_ConnectionReceived(Windows.Networking.Sockets.StreamSocketListener sender, Windows.Networking.Sockets.StreamSocketListenerConnectionReceivedEventArgs args)
{
socketListener.ConnectionReceived -= SocketListener_ConnectionReceived;
await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
tb_status.Text = "incoming Connection... receiving the file... Please wait until it´s done....";
});
try
{
Stopwatch stoppUhr = new Stopwatch();
stoppUhr.Start();
Stream inStream = args.Socket.InputStream.AsStreamForRead();
StorageFile outFile = await ApplicationData.Current.LocalCacheFolder.CreateFileAsync("theTestFile.wav", CreationCollisionOption.ReplaceExisting);
Stream fileWriteStream = await outFile.OpenStreamForWriteAsync();

这是这种情况 异常在此行上升,在副本 - 任务

await inStream.CopyToAsync(fileWriteStream);
fileWriteStream.Dispose();
inStream.Dispose();
double elapsedSeconds = stoppUhr.Elapsed.TotalSeconds;
stoppUhr.Stop();
stoppUhr = null;
double recSizeMB = (await outFile.GetBasicPropertiesAsync()).Size / 1024 / 1024;
double mBitPerSec = recSizeMB * 8 / elapsedSeconds;

**这是一个WINDOWS预览问题...:)感谢您的帮助:)

**几天后,我的应用程序已经有了它的拳头alpha启动:)) OneDrive 和 LAN/WLAN (W10 UWP) 的快速传输 - 未来商店链接

为你:)

最新更新