У меня есть метод, который иногда занимает больше минуты, чтобы выполнить. Я хочу создать задачу для мониторинга времени, которое требуется для выполнения этого метода. Если метод выполняется с-в 2 минуты, я должен вернуть вывод первой задачи, иначе я должен выбросить исключение. Я использую .net framework 4.0 с C# в качестве языка.Создайте две задачи в C# .net и закройте один из них через определенный период времени
В этом случае я не могу использовать Microsoft Reactive Extensions, так как он освобождает основную нить. Я не хочу, чтобы освободить основной поток, пока происходит следующее
- тайм-аут
- данных возвращается
- Любое другое исключение происходит
Просьба представить свои предложения.
@Brown_Dynamite, у вас есть несколько вариантов: ** 1) ** просто назовите его следующим образом: 'var result = MethodAsync (timeout: 1000) .Result;' - this будет блокировать основной поток. ** 2) ** альтернативно: 'MethodAsync (timeout: 1000) .Wait();' ** 3) ** удалить 'async/await' и сделать' Task.WaitAny' вместо 'TaskEx.WhenAny' внутри кода Я отправил. – Noseratio
Я выполнил код, который вы использовали после внесения этих двух изменений. 1) Период ожидания для задачи 1 задан равным 3000, а задание 2 задано как 6000. Но задача 2 выполняется сначала, и в результате возникает TaskCanceledException - – SharpCoder
@Brown_Dynamite, действительно, в версии 'ContinueWith' была непонятная ошибка, обратите внимание на изменение: 'task.Result == task1'. Попробуй это сейчас. В версии 'async/await' не было этой ошибки. – Noseratio