【发布时间】:2018-05-24 13:39:19
【问题描述】:
我有来自的 TCP 客户端
System.Net.Sockets
public async void startTCP()
{
await client.ConnectAsync(IPAddress, port);
stream = client.GetStream();
}
我用try catch 块包围它但是当我运行代码并引发此异常并且VS显示我在
UnhandledException += (sender, e) =>
{
if (global::System.Diagnostics.Debugger.IsAttached)
global::System.Diagnostics.Debugger.Break();
};
在App.g.i.cs
不是我想去的地方 => 自己处理异常
System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: 请求的地址在其上下文中无效 255.255.255.255:25565 在 System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult) 在 System.Net.Sockets.TcpClient.EndConnect(IAsyncResult asyncResult) 在 System.Net.Sockets.TcpClient.c.b__21_1(IAsyncResult 异步结果) 在 System.Threading.Tasks.TaskFactory1.FromAsyncCoreLogic(IAsyncResult iar,Func2 endFunction,Action1 endAction,Task1 承诺,布尔 需要同步) --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) 在 System.Runtime.CompilerServices.TaskAwaiter.GetResult() 在 PersonDesk.Socket.d__10.MoveNext() --- 从之前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.AsyncMethodBuilderCore.c.b__6_0(对象 状态) 在 System.Threading.WinRTSynchronizationContext.Invoker.InvokeCore()}
IP 地址只是引发异常的占位符
【问题讨论】:
-
try...catch 在哪里??
-
try-catch是在startTCP方法内部,还是在您调用它的地方?async void意味着startTCP是一劳永逸,因此您将无法处理方法之外的异常。 -
使用“public async Task StartTcpAsync()”而不是“public async void startTCP()”
-
try catch 是在 StartTCP 之外的,这是我调用它的地方。
标签: c# exception-handling uwp network-programming async-await