Как я могу поднять исключение, добавленное внутри 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 exception can't be caught outside of this context
}
});
}
public async Task BackupDatabase(string directory)
{
string sql = $"BACKUP DATABASE [MY_DB] TO DISK = 'd:\some\path.bak' with init, checksum, copy_only";
using (SqlConnection connection = new SqlConnection(_connectionString))
{
SqlCommand command = new SqlCommand(sql, _connection);
command.CommandTimeout = timeoutSeconds;
connection.Open();
command.ExecuteNonQuery();
}
}
< /code>
Кто -то пометил этот билет как дубликат, указывая на другой пост, в котором говорилось о продолжении. Поэтому я попробовал следующее, но, похоже, это также не делает то, что я хочу (это также приводит к проглатыванию исключения и не видно по ловли в основном): < /p>
Task t = Task.Run(() =>
{
BackupDatabase();
});
try
{
await t.ContinueWith(task =>
{
// task.IsFaulted is always false even when BackupDatabase throws an exception
if (task.IsFaulted)
{
throw task.Exception.InnerException;
}
});
_logger.Info("This line is never reached when there is no exception thrown previously");
}
catch (Exception ex)
{
// We never reach here, even when `BackupDatabase` does throw an exception.
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... n-task-run
Как поймать исключения, брошенные изнутри task.run? [дублировать] ⇐ C#
Место общения программистов C#
-
Anonymous
1758793230
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 exception can't be caught outside of this context
}
});
}
public async Task BackupDatabase(string directory)
{
string sql = $"BACKUP DATABASE [MY_DB] TO DISK = 'd:\some\path.bak' with init, checksum, copy_only";
using (SqlConnection connection = new SqlConnection(_connectionString))
{
SqlCommand command = new SqlCommand(sql, _connection);
command.CommandTimeout = timeoutSeconds;
connection.Open();
command.ExecuteNonQuery();
}
}
< /code>
Кто -то пометил этот билет как дубликат, указывая на другой пост, в котором говорилось о продолжении. Поэтому я попробовал следующее, но, похоже, это также не делает то, что я хочу (это также приводит к проглатыванию исключения и не видно по ловли в основном): < /p>
Task t = Task.Run(() =>
{
BackupDatabase();
});
try
{
await t.ContinueWith(task =>
{
// task.IsFaulted is always false even when BackupDatabase throws an exception
if (task.IsFaulted)
{
throw task.Exception.InnerException;
}
});
_logger.Info("This line is never reached when there is no exception thrown previously");
}
catch (Exception ex)
{
// We never reach here, even when `BackupDatabase` does throw an exception.
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79774369/how-to-catch-exceptions-thrown-from-within-task-run[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия