簡體   English   中英

捕獲在不同線程/回調上運行的異常

[英]Catch the Exception Running on different thread/callback

我有一個執行一些代碼的函數,例如,

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#版本4中Task <>類和添加到C#版本5中的async / await關鍵字背后的主要動機。這實際上並不能幫助用戶應對隨機故障,更容易報告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM