Непредвиденное исключение в методе

230
23 августа 2017, 14:39

Есть метод для отсечки по времени выполнения асинхронной задачи, выглядит он вот так:

internal static async Task TimeoutAfter(Task task, int timeout)
{
    using (var timeoutCTS = new CancellationTokenSource())
    using (var timeoutTask = Task.Delay(timeout, timeoutCTS.Token))
    using (var completedTask = await Task.WhenAny(task, timeoutTask))
    {
        if (completedTask == task)
        {
            timeoutCTS.Cancel();
            await task;
        }
        else
            throw new TimeoutException("The operation has timed out.");
    }
}

В конструкторе формы создана подписка на обработку TaskScheduler.UnobservedTaskException.

Суть проблемы: если переданная в метод задача создает исключение, оно пробрасывается в UnobservedTaskException. До применения этого метода подобного поведения не наблюдалось. Пришлось, на время, использовать заглушку в виде:

TaskScheduler.UnobservedTaskException += (s, args) =>
{
    args.SetObserved();
};

Вопрос: почему происходит проброс исключений в UnobservedTaskException и как корректно выйти из ситуации?

Update: если заключить метод, в котором вызывается TimeoutAfter, в блок try\catch - то исключение всеравно пробрасывается в UnobservedTaskException.

READ ALSO
It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level

It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level

Во время работы в студии все хорошо работает, когда публикую сайт на сервер пишет вот такие ошибки :

227
Горячие клавиши в TreeView

Горячие клавиши в TreeView

Есть TreeView, к которому биндятся команды копирования/вставки/удаления узлов с горячими клавишами

283
Как правильно обновить данные

Как правильно обновить данные

Создал глобальное соединение с БДДалее пытаюсь добавить данные:

205