1
私はブロッキングライブラリーコールを持っています。メールを待っている長い実行中のサービスにあるimapアイドルです。私は妄想的で、電子メールを見逃すことはありません。アイドルコールは、StopIdleへの同時呼び出しによって取り消すことができます。私はそれがまだアイドリングしていると思えば、毎分コールStopIdleに次の方法を実装しました。TPLでメソッド呼び出しをブロックするためのタイムアウトを作成する
次のような方法がありますか?このメソッドは動作しますが、私はちょうど眠っているスレッドプールスレッドを束ねるようになります。ヘンクの提案を使用して
while (true)
{
// read unseen emails here ...
var cancelSource = new CancellationTokenSource();
var cancelToken = cancelSource.Token;
Task stopIdleOccasionally = Task.Factory.StartNew(() =>
{
Thread.Sleep(TimeSpan.FromMinutes(1));
if (cancelToken.IsCancellationRequested)
{
return;
}
client.StopIdle(); // This causes the Idle() call to return
},
cancelSource.Token);
client.Idle(); // This is the blocking call that I want to create a timeout for
cancelSource.Cancel();
}
タイムアウトインディーまたはタイマーを使用してStopIdleを呼び出す方がよい。できるなら睡眠()を避けてください。 –
解決方法があります:http://stackoverflow.com/questions/11831844/unobservedtaskexception-being-throw-but-it-is-handled-by-a-taskscheduler-unobser?lq=1 –