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