【发布时间】:2017-09-09 00:50:28
【问题描述】:
我有一个小工具,可以轻松地将文件从我的手机 (Windows 10) 传输到 PC。只是一个文件,快速,无线,无需搜索文件夹。只需“共享”>,所有其他客户端将显示文件以供下载。首先使用 Internet 服务器作为“缓存”。现在我将这个想法扩展到 WLAN/LAN。我选择构建自己的解决方案,无需 HTTP 或 FTP。只是 TCP/IP 上的字节。第一个测试解决方案效果很好。我在缓冲区、大小、连续流方面玩了很多。我还在 GarbageCollector 中找到了一个不错的小方法 - 现在我的旧的、缓慢的 Lumia 640 传输最大的文件而不会耗尽内存(在 150 到 out_of_memory 之前使用最大 33MB 并且完美的缓冲区大小使这款手机达到我的 WLAN 最大值。传输速率. 不敢相信,
但有一件事我无法处理..
如果连接意外掉线,应用程序接收部分中的此行将强制执行 一个 TaskAwaiter 异常,立即,看起来比我处理它的速度要快得多。我尝试了使用同步变体、异步、Task.Run()、TaskFactory.RunAsync 的一切。我从未见过 UWP 应用程序崩溃得如此之快 “inStream”是基于意外的socketconnection和Excep。抛出 .CopyToAsync()。
TaskAwaiter 异常本身如何处理还是有其他方法?
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;
【问题讨论】:
-
异常详情是什么? this document能帮到你吗?