Не используйте QUWI.У меня есть краткое сравнение типов фоновых задач в моем блоге (Task
, BackgroundWorker
, Delegate.BeginInvoke
, ThreadPool.QueueUserWorkItem
и Thread
).
Для фоновых задачTask
явный победитель.QueueUserWorkItem
очень низкоуровневый по сравнению.
В частности, ваша проблема - распространение ошибок, и Task
имеет встроенную поддержку для этого, которой полностью не хватает в QueueUserWorkItem
.Вы можете создать его в себе, заключив свой делегат в try
/ catch
, сохранив исключение как часть аргумента делегата (или как связанную переменную лямбда-выражения), явно проверив егопозже, и сделаем некоторое технически неподдерживаемое отражение , чтобы сохранить след стека.
Но зачем?Task
поддерживает распространение ошибок из коробки.