我有一个函数正在执行某些代码,比如,
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);
}
我在哪里以及如何捕获此异常,或者在此异常的哪个位置被捕获。
答案 0 :(得分:1)
在回调中,可以抓住它的唯一地方。
是的,这是非常尴尬的地方,因为该回调在你没有启动的线程上运行,并且与其余代码完全异步运行。你必须以某种方式让你的程序中的主要逻辑知道出错了,并且需要采取纠正措施。这通常需要引发一个被封送回主线程的事件。至少让用户知道“它不起作用”。
这类问题是Task<>背后的主要动机。 C#版本4中的类和添加到C#版本5的async / await关键字。实际上没有任何帮助用户处理随机失败的事情,它只是使报告更容易。