Как поймать исключения, брошенные изнутри task.run? [дублировать]C#

Место общения программистов C#
Ответить
Anonymous
 Как поймать исключения, брошенные изнутри task.run? [дублировать]

Сообщение Anonymous »

Как я могу подняться на исключение, добавленное внутри await task.run, вне run ()? Главная нить. Task.run (() => {...}) .wait (); Работает так, как я хочу, но, конечно, заставляет пользовательский интерфейс не отвечать, когда Backupdatabase фактически подтверждает базу данных. Я также попробовал с Async BackupDataBase () , который работает как и ожидалось, но это также делает графический интерфейс без ответа.
static void Main(string[] args)
{
try
{
form.PromoteSql().Wait();
Application.Exit();
}
catch (Exception ex)
{
// the exception thrown from `BackupDatabase` doesn't make it into this block
}
}

public async Task PromoteSql()
{
await Task.Run(() =>
{
try
{
BackupDatabase();
}
catch (Exception ex)
{
// This handles any exception thrown by BackupDatabase

// but this is not caught by the catch block in Main:
throw;
}
});
}

public void BackupDatabase()
{
throw new Exception("test"); // obviously the real code backs up a database
}

< /code>
Кто -то пометил этот билет как дубликат, указывая на другой пост, в котором говорилось о продолжении. Поэтому я попробовал следующее, но, похоже, это также не делает то, что я хочу (это также приводит к проглатыванию исключения и не видно по ловли в основном): < /p>
Task t = Task.Run(() =>
{
BackupDatabase();
});

try
{
await t.ContinueWith(task =>
{
if (task.IsFaulted)
{
throw task.Exception.InnerException;
}
});

}
catch (Exception ex)
{
// We never reach here, even when `BackupDatabase` does throw an exception.
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... n-task-run
Ответить

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

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

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

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

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