0

我有一个函数执行一些代码就像,

Protected void XXXXfunc()
{
  //i register a callback for asynchronous operation below is just an example
  // not true to its operation 
  byte[] buffer = new byte[10];

  s.BeginReceive(buffer, 0, 10, SocketFlags.None,
      new AsyncCallback(OnMessageReceived), buffer);
}

// Callback function
XXXX callback OnMessageReceived(XXXX)
{
  //Something Goes wrong here i throw an exception 
  throw(exception);
}

我在哪里以及如何捕获这个异常,或者这个异常在哪里被捕获。

4

1 回答 1

1

在回调中,唯一可以捕捉到它的地方。

是的,这是一个非常尴尬的地方,因为回调在您没有启动的线程上运行,并且与您的其余代码完全异步运行。您必须以某种方式让程序中的主要逻辑知道出现问题并且需要采取纠正措施。这通常需要引发一个事件,该事件被编组回您的主线程。至少要让用户知道“它不起作用”。

这类问题是 C# 版本 4 中的 Task<> 类和添加到 C# 版本 5 中的 async/await 关键字的主要动机。它实际上并没有帮助用户处理随机故障,它只是让它更容易报告。

于 2012-07-31T23:44:51.893 回答