Асинхронный метод внутри try catch с рекурсией будет работать как положено? - PullRequest
0 голосов
/ 29 октября 2018

Это код, где я инициализирую свой пользовательский регистратор, способ, которым он работает, заключается в том, что я создаю экземпляр класса frmLog в MainForm, и this, который является экземпляром frmlog, создает экземпляр регистратора. В логгере нет ничего особенного, он работает с очередью с сервера, которую я копирую, пока блокирую, а затем выкидываю очередь в текстовый файл. То, что потерпело неудачу, было процессом очереди, но я не хочу рисковать.

Я ожидаю, что произойдет с этим кодом: : Каждый раз, когда в логгере возникает проблема, которая заставляет его генерировать исключение, которое не обрабатывается, перехватить его здесь и перезапустить. Будет ли это работать как задумано?

    Server Server;
    LogHelper logger;
    int counter = 0;
    public frmLog(Server server)
    {
        InitializeComponent();

        Server = server;

    }


    void inicializarlog()
    {
        logger = new LogHelper(rtbLog, Server, this);

    }

    private void btnSalirLog_Click(object sender, EventArgs e)
    {
        this.Hide();
    }

    private void frmLog_Load(object sender, EventArgs e)
    {
        MainAsync();
    }

    private async Task MainAsync()
    {
        try
        {
            await Task.Factory.StartNew(() => inicializarlog());
        }
        catch (Exception ex)
        {
            Console.WriteLine("Fallo el asincronico: " + ex.Message);
            if(counter++ >= 5)
               MainAsync();
            else
               Console.WriteLine("Fatal error, shutting down the logger");
        }
    }

Edit: повтор и библиотека polly, если работа не удалась, так как то, что я делаю, создает экземпляр регистратора, он всегда будет завершен, проблема после факта. если у меня нет проблем на сервере

...