Ограничить время выполнения вызова API в CLI / C ++ - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу ограничить время ожидания ответа на вызов API в классе ссылок C ++ / CLI.

Я видел следующий код в C #, которыйвыглядит так, как мне хотелось бы:

var task = Task.Run(() =>
{
    return LongRunningMethod();
});

bool isCompletedSuccessfully = task.Wait(TimeSpan.FromMilliseconds(3000));

if (isCompletedSuccessfully)
{
    return task.Result;
}
else
{
    throw new TimeoutException("The function has taken longer than the maximum time allowed.");
}

Как я могу "перевести" этот код в CLI / C ++?Похоже, что Task.Run не работает сразу.

Кстати, мой "LongRunningMethod" выглядит примерно так:

            bool my_client::CanContactServer()
            {
                bool isAvailable = static_cast<bool>(m_p_client->contactServer());

                return isAvailable;
            }

1 Ответ

2 голосов
/ 26 сентября 2019

C ++ / CLI не поддерживает лямбды, но все же вы можете передать делегат методу Task.Run.Ваш код будет выглядеть так:

// I suppose you have an instance of my_client initialized somewhere
my_client^ client = gcnew my_client(); 

Func<bool>^ f = gcnew Func<bool>(client, &my_client::CanContactServer);
Task<bool>^ task = Task::Run(f);

bool isCompletedSuccessfully = task->Wait(TimeSpan::FromMilliseconds(3000));

if (isCompletedSuccessfully)
{
    return task->Result;
}
else
{
    throw gcnew TimeoutException("The function has taken longer than the maximum time allowed.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...