Тайм-аут дротиков на будущее - PullRequest
1 голос
/ 14 июня 2019

Как заставить await future длиться не более 5 секунд? Мне это нужно, потому что при некоторых сетевых операциях соединение иногда выдает ошибку без вывода сообщений. Следовательно, мой клиент просто ждет часами без ответа. Вместо этого я хочу, чтобы это вызвало ошибку, когда клиенты ждут более 5 секунд

Мой код может вызвать ошибку, но он все еще ждет

Future shouldnotlastmorethan5sec() async {
  Future foo = Future.delayed(const Duration(seconds: 10));;
  foo.timeout(Duration(seconds: 5), onTimeout: (){
    //cancel future ??
    throw ('Timeout');
  });
  await foo;
}
Future test() async {
  try{
    await shouldnotlastmorethan5sec(); //this shoud not last more than 5 seconds
  }catch (e){
    print ('the error is ${e.toString()}');
  }
}
test();

1 Ответ

1 голос
/ 14 июня 2019

Когда вы вызываете Future.timeout , вам нужно использовать возвращаемое значение, чтобы получить правильное поведение. В вашем случае:

Future shouldnotlastmorethan5sec() {
  Future foo = Future.delayed(const Duration(seconds: 10));
  return foo.timeout(Duration(seconds: 5), onTimeout: (){
    //cancel future ??
    throw ('Timeout');
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...