Выдать исключение из отложенной задачи в основной поток [закрыто]C#

Место общения программистов C#
Ответить
Anonymous
 Выдать исключение из отложенной задачи в основной поток [закрыто]

Сообщение Anonymous »

Можно ли выбросить исключение из отложенной задачи в вызывающий (синхронный) поток?
Вот пример, который не работает, но должен проиллюстрировать концепцию:

Код: Выделить всё

public static void Main()
{
try
{
Task.Delay(5000).ContinueWith((t) => throw new Exception());
DoSomething();
}
catch (Exception ex)
{
Console.WriteLine("Method 'DoSomething' took longer than 5 seconds and has been aborted.");
}
}
Если DoSomething() занимает больше 5 секунд, отложенная задача срабатывает и выдает исключение. Но поскольку в задаче нет ожидания, исключение проглатывается.
Мне интересно узнать, есть ли какие-либо способы успешно выполнить это без необходимости создания родительский метод асинхронный. Возможно, какой-то способ передать ссылку на основной поток, обратный вызов или обработчик событий?

ДОПОЛНИТЕЛЬНЫЕ ЗАМЕЧАНИЯ
Кажется, мой вопрос был не очень ясен. Я не утверждаю, что этот пример кода является «хорошим» решением или что это вообще решение. Я просто пытался проиллюстрировать концепцию и предложить действенные методы достижения этой функциональности. Забыв об особенностях примера кода, предположим следующие ограничения:
  • Вы работаете в рамках синхронного метода.
  • Вам нужно вызвать какой-то другой внешний синхронный метод. Вы не знаете, сколько времени потребуется для завершения.
  • Если внешний метод завершится в течение n секунд, отлично. В противном случае вы хотите отказаться от вызова внешнего метода и позволить остальной части вашего кода продолжить работу.
Опять же, плохой пример просто имелся в виду чтобы проиллюстрировать этот сценарий, чтобы привлечь реальные/хорошие/альтернативные идеи.

Подробнее здесь: https://stackoverflow.com/questions/785 ... ain-thread
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»