Как создать универсальный объект тайм-аута для различных блоков кода?

У меня есть ряд блоков кода, которые занимают слишком много времени. Мне не нужно никакого изящества, когда оно терпит неудачу. На самом деле, я хочу выдать исключение, когда эти блоки занимают слишком много времени и просто выпадают из нашей стандартной обработки ошибок. Я бы предпочел НЕ создавать методы из каждого блока (это единственные предложения, которые я видел до сих пор), так как это потребовало бы значительного изменения базы кода.

Вот что я бы НРАВИТСЯ , чтобы создать, если это возможно.

public void MyMethod( ... )
{

 ...

    using (MyTimeoutObject mto = new MyTimeoutObject(new TimeSpan(0,0,30)))
    {
        // Everything in here must complete within the timespan
        // or mto will throw an exception. When the using block
        // disposes of mto, then the timer is disabled and 
        // disaster is averted.
    }

 ...
}

Я создал простой объект для этого с помощью класса Timer. (ПРИМЕЧАНИЕ для тех, кто любит копировать /вставлять: этот код не работает !!)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;

    public class MyTimeoutObject : IDisposable
    {
        private Timer timer = null;

        public MyTimeoutObject (TimeSpan ts)
        {
            timer = new Timer();
            timer.Elapsed += timer_Elapsed;
            timer.Interval = ts.TotalMilliseconds;

            timer.Start();
        }

        void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            throw new TimeoutException("A code block has timed out.");
        }

        public void Dispose()
        {
            if (timer != null)
            {
                timer.Stop();
            }
        }
    }

Это не работает , потому что класс System.Timers.Timer захватывает, поглощает и игнорирует любые исключительные ситуации, которые, как я обнаружил, наносит ущерб моему дизайну. Любой другой способ создания этого класса /функциональности без полного редизайна?

Это выглядело так просто два часа назад, но у меня сильно болит голова.

7 голосов | спросил Jerry 4 Jpm1000000pmMon, 04 Jan 2016 21:09:44 +030016 2016, 21:09:44

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132