Можно ли решить проблему превышения времени ожидания вызова функции в C #? - PullRequest
4 голосов
/ 14 мая 2010

В моей программе я вызываю метод

xslTransform.Load(strXmlQueryTransformPath, xslSettings, new XmlUrlResolver());


Проблема, с которой я сталкиваюсь, заключается в следующем: иногда эта функция не выполняется должным образом.

Иногда компилятор поднимает проблему тайм-аута после долгого пробного периода, что приводит к закрытию этой части приложения. Вот чего я хочу избежать.

Так что, если оно превышает определенное время, скажем, 10 секунд, мне нужно вспомнить метод. Можно ли добавить несколько строк кода рядом с этим, что может соответствовать требованию?

1 Ответ

4 голосов
/ 14 мая 2010

Вам необходимо вызвать метод для нового Thread, затем вызвать Join в новом потоке с таймаутом 10 секунд.

Например:

public static bool RunWithTimeout(ThreadStart method, TimeSpan timeout, int maxTries) {
    while(maxTries > 0) {
        var thread = new Thread(method);
        thread.Start();
        if (thread.Join(timeout))
            return true;
        maxTries--;
    }
    return false;
}


if (!RunWithTimeout(
    delegate { xslTransform.Load(strXmlQueryTransformPath, xslSettings, new XmlUrlResolver()); },
    TimeSpan.FromSeconds(10),
    5  //tries
))
    //Error! Waaah!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...