public Task IdleAsync (CancellationToken doneToken, CancellationToken cancellationToken = default (CancellationToken))
{
if (!doneToken.CanBeCanceled)
throw new ArgumentException ("The doneToken must be cancellable.", nameof (doneToken));
CheckDisposed ();
CheckConnected ();
CheckAuthenticated ();
if ((engine.Capabilities & ImapCapabilities.Idle) == 0)
throw new NotSupportedException ("The IMAP server does not support the IDLE extension.");
if (engine.State != ImapEngineState.Selected)
throw new InvalidOperationException ("An ImapFolder has not been opened.");
return Task.Factory.StartNew (() => {
lock (SyncRoot) {
Idle (doneToken, cancellationToken);
}
}, cancellationToken, TaskCreationOptions.LongRunning, TaskScheduler.Default);
}