Я только что написал некоторый код для выполнения действия тайм-аута, если асинхронная задача занимает слишком много времени для обработки, но мне не ясно, когда и когда экземпляр тайм-аута когда-либо будет удален (я думаю, Так будет в случае, когда асинхронная задача завершается своевременно, но в остальном я понятия не имею), или если я собираюсь накапливать экземпляры каждый раз, когда вызываю этот код.
//StartNew creates a new instance of System.Timers.Timer, and
// invokes the ActionOnTimeout after 2000ms, unless calling code
// calls "Stop" first
var timeout = ProcessTimeout.StartNew(() => ActionOnTimeout(), 2000);
//DoAsyncTask creates a new thread, does potentially slow stuff,
/// then invokes this callback
DoAsyncTask(() =>
{
if(timeout.Running)
{
timeout.Stop();
DoCallbackStuff();
}
});
(Если это поможет, класс ProcessTimeout использует System.Timers.Timer
)