【问题标题】:Catching async operation exception is not working捕获异步操作异常不起作用
【发布时间】: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


【解决方案1】:
public async void startTCP()

async void。你不应该那样做。因为

我用 try catch 块包围它

这是对async void 不起作用的一件事。


要获得完整的答案,您必须说明如何调用 startTCP()。涉及完整的调用链。

这似乎是关于 WPF 的,所以从事件处理程序开始(可以是一个异步 void)。

【讨论】:

  • 那么如果我将它的类型改为Task,那么我可以在调用方法中捕获异步操作引发的异常吗?
  • 另外它不是 wpf 而是 Uwp。
  • 感谢您的帮助,我不知道。它现在正在工作。
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多