asyncオプション
何のバイトは、例えばのために受信されない場合は、操作を完了するために、非同期コールバックメソッドでタイマーを使用することができます5秒。バイトが受信されるたびにタイマーをリセットします。 BeginReadの前に起動してください。
同期オプション
代わりに、読み取りを完了する前に待機する最大時間を確立するために、基盤となるソケットのReceiveTimeoutというプロパティを使用することができます。より大きなバッファを使用し、タイムアウトを例えばに設定することができます。 5秒。
MSDN documentationから、そのプロパティは同期読み取りにのみ適用されます。別のスレッドで同期読み取りを実行できます。
UPDATE
はここで同様の問題からつなぎ合わせてラフ、未テストコードです。それはおそらく実行されません(または、バグフリー)が、あなたのアイデアを与える必要があります:
private EventWaitHandle asyncWait = new ManualResetEvent(false);
private Timer abortTimer = null;
private bool success = false;
public void ReadFromTwitter()
{
abortTimer = new Timer(AbortTwitter, null, 50000, System.Threading.Timeout.Infinite);
asyncWait.Reset();
input.BeginRead(buffer, 0, buffer.Length, InputReadComplete, null);
asyncWait.WaitOne();
}
void AbortTwitter(object state)
{
success = false; // Redundant but explicit for clarity
asyncWait.Set();
}
void InputReadComplete()
{
// Disable the timer:
abortTimer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
success = true;
asyncWait.Set();
}
Twitterのポリシーのために接続を開いたり閉じたりすることができません。非同期コールバックタイマーを使用して読み込みを早期に終了する方法の例を挙げることはできますか? – HenryZhang
@huadianz:出発点を与えるための大まかな例を追加しました。 –
Readはバッファ内のデータを返しますか、またはそのデータは失われていますか? – HenryZhang