Обратите внимание, что то, что описано здесь, является старым поведением (как указано в комментариях), и оно не происходит с .NET 4.5 и новее.
Что происходит, так это то, что Задача не была успешно завершена иВы не проверяете ошибки.Когда сборщик мусора пытается очистить объект Task
, он находит там необработанное исключение и выбрасывает его в AggregateException
.Это исключение, которое фактически не выбрасывается в ваш блок try
(он даже находится в другом потоке), поэтому ваш улов не может его перехватить.
То, что вы хотите сделать, это правильно await
созданная задача.Возможно, вы захотите прочитать об асинхронном / ожидании в C # на этом этапе.Если вы хотите, чтобы задание можно было отменить, вам, возможно, придется использовать GetAsync
с токеном отмены, или вам придется ждать, пока GetStringAsync
не завершится в какой-то момент.
Если вы по какой-то причине неЕсли вы хотите использовать асинхронный способ ожидания (вы должны!), вы все равно можете использовать tsk.Wait();
.Это, однако, обернет выброшенное исключение в AggregateException
, и вызов будет синхронным .
И если вы действительно не можете оставаться рядом и ждать завершения своей функции, вы можете увидеть в этот вопрос , как автоматически обрабатывать проверку исключений с помощью задачи продолжения.
Однако я бы очень посоветовал вам использовать async / await и правильно проверить, как завершаются задачи и что они выдают.