2012-07-31 56 views
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); 
} 

在哪裏?我如何捕獲這個異常或者是被人抓住這個異常漏斗。

回答

1

在回調,唯一的地方,你可以它。

是的,這是一個很難尷尬的地方,因爲該回調運行在你沒有啓動的線程上,並且與其餘代碼完全異步運行。您必須以某種方式讓程序中的主要邏輯知道出現了問題,並且需要採取糾正措施。這通常需要引發一個事件,將其封送回主線程。至少讓用戶知道「它不起作用」。

這種問題是任務<背後的主要動機>類在C#4版和異步/伺機關鍵字加入到C#版本5,它實際上並不做任何事情來幫助用戶處理隨機故障,它只是使報告更容易。