2017-11-02 45 views
0

私はこのコードをストリーミングサーバーに接続します。サーバーは時々切断されます。それを検出して、必要なときに接続を再開したいと考えています。C#NetworkStreamはすべての種類の切断と例外を検出します

このコードではどのように例外を検出できますか?
これで接続が切断され、キャッチできません。

this.ns = new NetworkStream(server); 
while (true) 
{ 
    // Incoming message may be larger than the buffer size. 
    do 
    { 
     byte[] myReadBuffer = new byte[10240 * 5]; 
     await this.ns.ReadAsync(myReadBuffer, 0, myReadBuffer.Length).ContinueWith((numberOfBytesRead) => 
     { 
      string message = Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead.Result); 
      p.Invoke(message); 
     }); 
    } 
    while (this.ns.DataAvailable); 
} 
+0

このコードが意図したとおりに機能し、改善の可能性がある場合は、[コードレビュー](https://codereview.stackexchange.com)にこの質問を投稿する必要があります。 –

+0

@ s.m。実際には例外を取得して、それらをキャッチすることはできません... – SexyMF

+0

正しい例外のtry/catchでコードをラップしようとしましたか? –

答えて

1

あなたの変数numberOfBytesReadは、実際にはそれが完了したか失敗したかどうかを確認することができ、そこから終わった前のタスクです。

if(numberOfBytesRead.IsFaulted) 
{ 
    var aggregatedEx = numberOfBytesRead.Exception; 
    //do something 
} 
+0

ここに 'ContinueWith'を使う理由は全くないことに注意してください。 'var numberOfBytesRead = ns.ReadAsync(...);を待ちます。 varメッセージ= ... ' – Evk

関連する問題