В рамках большого процесса автоматизации мы вызываем сторонний API, который выполняет некоторые функции, вызывая службы на другом компьютере. Недавно мы обнаружили, что время от времени, когда другая машина недоступна, вызов API иногда прерывается до 40 минут при попытке подключения к удаленному серверу.
API, который мы используем, не предлагает способ указать время ожидания, и мы не хотим, чтобы наша программа долго ждала, поэтому я подумал, что потоки - это хороший способ установить время ожидания. Полученный код выглядит примерно так:
Thread _thread = new Thread(_caller.CallServices());
_thread.Start();
_thread.Join(timeout);
if (_thread.IsAlive)
{
_thread.Abort();
throw new Exception("Timed-out attempting to connect.");
}
По сути, я хочу, чтобы APICall () работал, но если он все еще работает после истечения времени ожидания, предположим, что он потерпит неудачу, убейте его и продолжайте.
Поскольку я новичок в потоках в C # и во время выполнения .net, я подумал, что задам два связанных вопроса:
Есть ли лучший / более подходящий механизм в библиотеках .net для того, что я пытаюсь сделать, и я зафиксировал какие-либо ошибки в этом фрагменте кода?