ожидание при асинхронном вызове вызывает неожиданное исключение тайм-аута

Попробуйте запустить код с помощью JVM, отличного от Sun, и посмотрите, что произойдет ...

(ваш код не будет работать с исключением ClassNotFound)

0
задан Nardu 5 March 2019 в 11:56
поделиться

1 ответ

Проблема связана с тайм-аутом по умолчанию, равным 5 минутам удаленного взаимодействия (ServiceFabric.Services.Remoting) между службами.

Доступна версия 2 удаленного взаимодействия, и согласно документации Microsoft «Стек удаленного взаимодействия V2 работает лучше».

После обновления до V2 одним из возможных способов решения проблемы является увеличение времени ожидания

 new ServiceProxyFactory((c) => new FabricTransportServiceRemotingClientFactory(
                                       new FabricTransportRemotingSettings() {
                                           OperationTimeout = TimeSpan.FromMinutes(30)
                                       })))

Но это только увеличит время ожидания и не удалит его полностью.

Другой способ решить эту проблему - запустить работника, который обрабатывается непосредственно в сервисе, который использовался с удаленным взаимодействием, и ждать его завершения. Таким образом, решение не связано с таймаутом удаленного взаимодействия.

Например:

, заменив это:

await restoreClient.RestoreAsync(id, name).ConfigureAwait(false);

на

var workerId = StartANewWorker()
JobState jobState;
do {
    //poll for the status of the new worker
    var workerStatus = GetStatusOfTheWorker(workerId);

    await Task.Delay(1000).ConfigureAwait(false);
    if (workerStatus == Failed) {
        throw new Exception("Something went wrong");
    }
} while (workerStatus != Finished);
0
ответ дан Nardu 5 March 2019 в 11:56
поделиться
Другие вопросы по тегам:

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